Swift 超基本 TableViewの使い方をメモ

1.StoryboardでTableViewを追加
　ViewControllerからDataSourceとDelegateへドラッグ

　ドラッグできたら、こんな感じ
![スクリーンショット 2020-11-06 14.45.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644086/d9a49ee7-79cb-4218-7d7f-0ff66eade6fc.png)

2.TableViewの中にTableViewCellを追加
　IdentifierのところでCellに名前をつける

普通に「cell」って名前をつけました
![スクリーンショット 2020-11-06 14.47.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644086/0801908e-a39a-83a6-29b2-c8a2de598cdf.png)

3.ソースコード（基本）
 3.1プロトコル追加
　TableViewが所在しているViewControllerに
　UITableViewDelegateとUITableViewDataSourceプロトコルを追加する

```php:HomeViewController
class HomeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
```

　3.2データ作成

```swift:HomeViewController
    let sectionTitle = ["フルーツ","山々","飲み物"]
    let listContentOne = ["アップル","イチゴ","グレープ","パイナプル","キウイ"]
    let listContentTwo = ["立山","男体山","谷川岳","金峰山","穂高岳","大菩薩嶺"]
    let listContentThree = ["コーヒー","豆乳","ジュース","炭酸","水"]
```

　3.3セッション数を決める

```swift:HomeViewController
    func numberOfSections(in tableView: UITableView) -> Int {
        return sectionTitle.count
    }
```

　3.4セッションのTitleを決める

```swift:HomeViewController
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return sectionTitle[section]
    }
```

　3.5セッションにあるCell数を決める

```swift:HomeViewController
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        switch section {
        case 0:
            return listContentOne.count
        case 1:
            return listContentTwo.count
        case 2:
            return listContentThree.count
        default:
            return listContentOne.count
        }
    }
```

　3.6セルに中身を入れる

```swift:HomeViewController
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        
    let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        switch indexPath.section{
        case 0:
            cell.textLabel!.text = listContentOne[indexPath.row]
        case 1:
            cell.textLabel!.text = listContentTwo[indexPath.row]
        case 2:
            cell.textLabel!.text = listContentThree[indexPath.row]
        default:
            cell.textLabel!.text = listContentOne[indexPath.row]
        }
        
        return cell
    }
```

　3.7セル押下後の挙動を実装(例を一つのみ)

```swift:HomeViewController
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if indexPath.section == 0 {
            if indexPath.row == 0 {
                let anotherStoryboard:UIStoryboard = UIStoryboard(name: "CellDetailPage", bundle: nil)
                let targetViewController = anotherStoryboard.instantiateViewController(withIdentifier: "celldetail")
                self.present(targetViewController, animated: true, completion: nil)
            }
        }
    }
```

4.ソースコード（AddOn）
　4.1セッションインデックスビューラーを表示させる
　　↓これを入れるだけですが、デフォルトでインデックス文字はBlue、背景色がClear

```swift:HomeViewController
    func sectionIndexTitles(for tableView: UITableView) -> [String]? {
        return sectionTitle
    }
```
　4.2色、背景色を変える

```swift:HomeViewController

    func sectionIndexTitles(for tableView: UITableView) -> [String]? {
        tableView.sectionIndexColor = UIColor.darkGray
        tableView.sectionIndexBackgroundColor = UIColor.clear
        return sectionTitle
    }
```
![Simulator Screen Shot - iPhone 8 - 2020-11-06 at 16.28.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/644086/7d0da3d6-2e93-b4e7-0162-1a1199d71b2c.png)

参考記事:[【初心者向け】UITableViewのSection(セクション)の使い方](https://blog.mothule.com/ios/uitableview/ios-uitableview-section-basic#sectionセクションとはrowロウとは)