[iOS] 敢えてTableViewControllerにする2つの嬉しいこと

# UITableViewControllerを使うと嬉しいこと

## 2つのメリット

1. `Static Cell` が使えること
2. 入力欄をタップしてキーボードが表示された際、入力欄が隠れないよう、自動的にスクロールしてくれる点

### Static Cellって？

- 静的にセクションやセルの数を指定するもの
- 設定画面など、単純なTableViewを使った画面を作りたいときに、サクッと作れて便利
- 普通の `UITableView` では `Static Cell` は使えず、指定してもコンパイルエラーになる

### 入力欄のスクロール制御

- `UIScrollView` の中に入力欄を設置した場合、キーボードが表示されてもスクロール制御はされず、入力欄が隠れてしまうことがある
    - 入力欄が隠れないようにするためには、コード側でちょっとややこしいスクロール制御を加える必要がある

<img width="320" alt="Simulator Screen Shot - iPhone SE - 2018-07-06 at 06.10.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/5eb99e30-f067-4114-9582-ed7cf8abb43f.png">

<img width="320" alt="Simulator Screen Shot - iPhone SE - 2018-07-06 at 06.10.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/f365d524-375b-dd23-7ae4-6f7c53111278.png">


- `UITableViewController` の中に入力欄を設置した場合、キーボードを開いても入力欄が隠れないように自動制御してくれるため、コード側での指定が不要で、とても簡単

<img width="320" alt="Simulator Screen Shot - iPhone SE - 2018-07-06 at 06.10.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/5eb99e30-f067-4114-9582-ed7cf8abb43f.png">

<img width="320" alt="Simulator Screen Shot - iPhone SE - 2018-07-06 at 06.10.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/20a9b96a-1d65-a72f-d80d-930308225d57.png">


## Static Cell を使った入力画面の作成手順

### 準備

- プロジェクトを `Single View App` で作成
- `ViewController.swift` の `UIViewController` を `UITableViewController` に変更

```swift
import UIKit

class ViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

}
```

### Main.storyboard

- Storyboard上に `Table View Controller` を設置

<img width="259" alt="スクリーンショット 2018-07-06 6.36.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/6d21fb15-e547-b0b2-2c22-1bb14d31c559.png">

- `Storyboard Entry Point` を追加した `Table View Controller` に変更
- `Identify Inspector` パネルの `Custom Class` > `Class` 欄に、 `ViewController` を入力

<img width="257" alt="スクリーンショット 2018-07-06 6.35.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/32b83369-40b6-0849-1efd-83e35b3ebf45.png">

- `Attributes Inspector` パネルの最上部にある `Content` を `Static Cell` に変更

<img width="280" alt="スクリーンショット 2018-07-06 5.27.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/8a72d26d-43ac-9c46-10a1-bd5bcc146692.png">

- `Sections` の部分で、必要なセクション数に変更 (今回は `5` )

<img width="258" alt="スクリーンショット 2018-07-06 6.37.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/b6b46da8-2a2a-47fe-1a76-91c05615b303.png">

<img width="292" alt="スクリーンショット 2018-07-06 5.38.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/04bdec9e-2e1a-5f4d-1860-6bd93c236f68.png">
- `Document Outline` パネルから `Table View Section` を選択し、 `Attributes Inspector` パネル の `Rows` 欄でCell数を指定し、 `Header` 欄でセクションのタイトルを指定

<img width="254" alt="スクリーンショット 2018-07-06 6.39.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/9c614061-ebf2-9694-134a-713dc08b09df.png">

- `Table View Cell` の中に `Text Field` を設置し、上下左右に `Constraints` を加える (今回は全て `0` )

<img width="301" alt="スクリーンショット 2018-07-06 6.08.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/1009b2bd-cff9-6797-e222-9086227f94e1.png">

<img width="320" alt="Simulator Screen Shot - iPhone SE - 2018-07-06 at 06.10.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/5eb99e30-f067-4114-9582-ed7cf8abb43f.png">


## 備考

### 最初から UITableViewController でswiftファイルを作成した場合

- Static Cell にすることで不要となる `numberOfSections(in tableView: UITableView)` と `tableView(_ tableView: UITableView, numberOfRowsInSection section: Int)` を削除

<img width="790" alt="スクリーンショット 2018-07-06 5.55.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/29536/395d8dc9-ec98-86f1-94ae-0c81edc2aa9d.png">


## 環境

- Xcode Version 9.4.1