回答編集履歴

2 typo

ykws

ykws score 1168

2017/09/29 12:53  投稿

> それと[cell 追加ボタン]がどういう仕組みでtableViewに表示されているのかが分からないので+ボタンの中に[cell 追加ボタン]の処理の書き方が分からなく困っています。
`UITableView` の表示は `func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell` の部分で制御しています。
これは `UITableView` を表示するときに `indexPath` セルの位置を受け取り、そこに表示する `UITableViewCell` セルの内容を返し、それが画面上に反映される仕組みになっています。
この中で下記のように、配列 `kei` の値をセルの位置に合わせて表示しているのが読み取れると思います。
```swift
cell.textLabel?.text = kei[indexPath.row]
```
> 自分がやったこととしては宣言文をvar kei = [String]()にするとcell上の"cell 追加 ボタン"をを消すことが出来ます。
なので、 @blakekei さんの試した方法で配列 `kei` の値を変更すれば `UITableView` の表示にも反映される理屈になります。
> 追加していく順番を3,2,1ではなく1,2,3のようにしたいのですがその場合どうしたらいいのでしょうか?
> appendにすると1,2,3にはなるのですがそうすると[cell 追加 ボタン]の下に追加されてしまいます。
これを踏まえて、表示順は配列のデータ順なので、配列の末尾の前にデータを追加していけば期待するデータ順となり、表示順もそのようになります。
```swift
self.kei.insert(textField.text!, at:self.kei.count - 1)
```
意味合いの異なるセルはセクションを分けるのも方法の一つだと思います。
そうすると可変の配列と固定の配列を別で管理することになるので、 `append` が有効になります。
参考: [UITableView Section の設定](https://i-app-tec.com/ios/tableview-section.html)
続いて、セルのタップ制御を現状は下記のように最後のセルしか反応しないように書いていますので、
```swift
kei.count > (indexPath.row + 1)
```
「cell 追加 ボタン」全てに反応させるには、例えば、以下のような条件に変更すれば反応します。
```swift
kei[indexPath.row + 1] != "cell 追加 ボタン"
kei[indexPath.row] != "cell 追加 ボタン"
```
ただ、 UI 的に不自然な気はします。
セルの追加は画面右上の「+」ボタンだけで十分では?
1 セルのタップ制御について追記しました

ykws

ykws score 1168

2017/09/29 09:55  投稿

> それと[cell 追加ボタン]がどういう仕組みでtableViewに表示されているのかが分からないので+ボタンの中に[cell 追加ボタン]の処理の書き方が分からなく困っています。
`UITableView` の表示は `func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell` の部分で制御しています。
これは `UITableView` を表示するときに `indexPath` セルの位置を受け取り、そこに表示する `UITableViewCell` セルの内容を返し、それが画面上に反映される仕組みになっています。
この中で下記のように、配列 `kei` の値をセルの位置に合わせて表示しているのが読み取れると思います。
```swift
cell.textLabel?.text = kei[indexPath.row]
```
> 自分がやったこととしては宣言文をvar kei = [String]()にするとcell上の"cell 追加 ボタン"をを消すことが出来ます。
なので、 @blakekei さんの試した方法で配列 `kei` の値を変更すれば `UITableView` の表示にも反映される理屈になります。
> 追加していく順番を3,2,1ではなく1,2,3のようにしたいのですがその場合どうしたらいいのでしょうか?
> appendにすると1,2,3にはなるのですがそうすると[cell 追加 ボタン]の下に追加されてしまいます。
これを踏まえて、表示順は配列のデータ順なので、配列の末尾の前にデータを追加していけば期待するデータ順となり、表示順もそのようになります。
```swift
self.kei.insert(textField.text!, at:self.kei.count - 1)
```
意味合いの異なるセルはセクションを分けるのも方法の一つだと思います。
そうすると可変の配列と固定の配列を別で管理することになるので、 `append` が有効になります。
参考: [UITableView Section の設定](https://i-app-tec.com/ios/tableview-section.html)
参考: [UITableView Section の設定](https://i-app-tec.com/ios/tableview-section.html)
続いて、セルのタップ制御を現状は下記のように最後のセルしか反応しないように書いていますので、
```swift
kei.count > (indexPath.row + 1)
```
「cell 追加 ボタン」全てに反応させるには、例えば、以下のような条件に変更すれば反応します。
```swift
kei[indexPath.row + 1] != "cell 追加 ボタン"
```
ただ、 UI 的に不自然な気はします。
セルの追加は画面右上の「+」ボタンだけで十分では?

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る