# 画面設計書 19-EditHint画面

## 概要

本ドキュメントは、Wikipedia iOSアプリにおける編集成功ヒント画面（EditHintViewController）の設計仕様を定義するものです。

### 本画面の処理概要

編集成功ヒント画面は、ユーザーがWikipedia記事の編集を正常に公開（publish）した後に表示される小さなヒントビューです。編集が成功したことをユーザーに通知し、ポジティブなフィードバックを提供します。

**業務上の目的・背景**：Wikipedia記事の編集は、コミュニティへの貢献として重要なアクションです。編集が成功した際にユーザーにフィードバックを提供することで、達成感を与え、継続的な編集参加を促します。本画面は、シンプルなアイコンとテキストで編集成功を視覚的に伝えます。

**画面へのアクセス方法**：記事編集を公開（publish）した後、自動的に画面下部にヒントとして表示されます。HintControllerによって管理されます。

**主要な操作・処理内容**：
1. 編集成功メッセージとアイコンを表示
2. 自動的に消えるか、ユーザーのアクションで閉じる

**画面遷移**：
- 遷移元: EditSaveViewController（編集保存画面）から成功通知として表示
- 遷移先: なし（自動的にまたはユーザー操作で閉じる）

**権限による表示制御**：特になし。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 23 | 編集保存 | 主機能 | 編集成功時のフィードバック表示 |

## 画面種別

通知 / ヒント

## URL/ルーティング

iOSネイティブアプリのため、URLルーティングは適用されません。HintControllerによって画面下部に表示されます。

## 入出力項目

| 項目名 | 型 | 入力/出力 | 必須 | 説明 |
|--------|-----|---------|------|------|
| theme | Theme | 入力 | 任意 | 表示テーマ（デフォルト: .standard） |
| delegate | HintViewControllerDelegate | 入力 | 任意 | デリゲート |

## 表示項目

| 項目名 | 表示形式 | 説明 |
|--------|---------|------|
| アイコン | UIImageView | "published-pencil"画像 |
| メッセージ | UILabel | "Your edit was successfully published" |

## イベント仕様

### 1-デフォルトアクション（タップ）

HintViewControllerのデフォルトアクションを実行。

- EditHintViewControllerでは特にオーバーライドされていない
- 基底クラスHintViewControllerのperformDefaultAction()が呼ばれる（デフォルトは空実装）

### 2-ビュー消失

ビューが消失する際の処理。

- delegate?.hintViewControllerWillDisappear()を呼び出し

### 3-高さ変更

ビューの高さが変更された際の処理。

- delegate?.hintViewControllerHeightDidChange()を呼び出し

## データベース更新仕様

### 操作別データベース影響一覧

ローカルデータベースへの更新はありません。

## メッセージ仕様

| メッセージID | 種別 | メッセージ内容 | 表示条件 |
|-------------|------|--------------|---------|
| - | テキスト | "Your edit was successfully published" | 常時表示（ハードコード） |

## 例外処理

| 例外状況 | 処理内容 |
|---------|---------|
| 画像読み込み失敗 | デフォルトのシステムアイコンが表示される |

## 備考

- HintViewControllerを継承
- configureSubviews()でアイコンとテキストを設定
- 基底クラスHintViewControllerがビュータイプ（default, confirmation, warning）を管理
- Themeableプロトコルは基底クラスで実装
- HintControllerが表示/非表示のアニメーションを管理

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: 基底クラスを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | HintViewController.swift | `Wikipedia/Code/HintViewController.swift` | 全体構造、ViewType、IBOutlet |

**主要処理フロー**:
1. **41-45行目**: ViewType enum - default, confirmation, warning
2. **47-65行目**: viewType didSet - ビュータイプに応じたビュー表示切り替え
3. **71-84行目**: viewDidLoad - configureSubviews()呼び出し、テーマ適用
4. **100-102行目**: configureSubviews() - サブクラスでオーバーライド

#### Step 2: サブクラスを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | EditHintViewController.swift | `Wikipedia/Code/EditHintViewController.swift` | configureSubviews()のオーバーライド |

**主要処理フロー**:
- **3-6行目**: configureSubviews() - アイコンとテキストの設定

#### Step 3: ヒント表示管理を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | HintController.swift | （参照のみ） | HintViewControllerの表示/非表示管理 |

### プログラム呼び出し階層図

```
EditHintViewController (extends HintViewController)
    │
    ├─ viewDidLoad() [HintViewController]
    │      ├─ configureSubviews() [EditHintViewController override]
    │      │      ├─ defaultImageView.image = "published-pencil"
    │      │      └─ defaultLabel.text = "Your edit was successfully published"
    │      └─ apply(theme:)
    │
    ├─ viewWillDisappear() [HintViewController]
    │      └─ delegate?.hintViewControllerWillDisappear()
    │
    └─ viewDidLayoutSubviews() [HintViewController]
           └─ delegate?.hintViewControllerHeightDidChange()
```

### データフロー図

```
[入力]                  [処理]                              [出力]

編集成功通知          HintController                      EditHintViewController
                 ───▶ 表示管理                        ───▶ (ヒントビュー表示)
                      ├─ presentHint()
                      └─ dismissHint()
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| EditHintViewController.swift | `Wikipedia/Code/EditHintViewController.swift` | ソース | メインViewController |
| HintViewController.swift | `Wikipedia/Code/HintViewController.swift` | ソース | 基底クラス |
| HintViewController.xib | `Wikipedia/Code/HintViewController.xib` | XIB | レイアウト定義 |
| HintController.swift | `Wikipedia/Code/HintController.swift` | ソース | 表示/非表示管理 |
| published-pencil | `Wikipedia/Assets.xcassets/` | 画像 | 成功アイコン |
