cell内のTextFieldの入力が完了した時、新しいcellの追加がしたい


cell内のTextFieldの入力が完了した後、新しいcellの追加がしたいです。  
iPhoneのリマインダーアプリのように、入力完了後、キーボードの改行ボタンを押すと、  
新しくcellが追加されるという形が理想です。

よろしくお願いします。

* * *
[code]

     //デリゲートメソッド
    func textFieldShouldReturn(_ textField: UITextField) -> Bool
    {
        //キーボードを閉じる。
        textField.resignFirstResponder()
        return true
    }
    
[/code]

今は、returnキーを押すと、キーボードが閉じるようにしてあります。  
このキーボード閉じる動作にプラスして新しくセルを追加できるようにしたいです。  
上のコードにどういうコードを書き足せば実行できるのかがわかりません。




テーブルに新しい行を挿入する方法を説明します。

[UITableView -
insertRows(at:with:)](https://developer.apple.com/reference/uikit/uitableview/1614879-insertrows)

`UITableView`クラスの、このメソッドを使用するのですが、使い方に二つのポイントがあります。ひとつは、挿入時のアニメーションをするために、`beginUpdates()`と、`endUpdates()`で挟んでやるということ。もうひとつは、テーブルに表示する元データに対する新データの挿入も、同時に行うということです。  
以下、サンプルコードを示します。コード中、`tableView`は、プロパティとして宣言したテーブルビュー自身、`tableData`は、テーブルに表示する元データ。文字列`String`の配列`[String]`とします。また、`UITextField`を貼り付けたセルは、`UITableViewCell`のサブクラス`CustomCell`としており、`CustomCell`は、プロパティ`textField`を持っています。

[code]

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        tableView.beginUpdates() // アニメーション開始。
        // テーブルの最終行を、IndexPathとして取得。
        let lastRowIndex = tableView.numberOfRows(inSection: 0)
        let indexPath = IndexPath(row: lastRowIndex, section: 0)
        // 行を最終行の次に挿入。
        tableView.insertRows(at: [indexPath], with: .automatic)
        // 元データにも挿入。
        tableData.insert("", at: lastRowIndex)
        tableView.endUpdates() // アニメーション終了。
        // 新しい行のテキストフィールドを、テキスト入力状態にする。
        if let cell = tableView.cellForRow(at: indexPath) as? CustomCell {
            cell.textField.becomeFirstResponder()
        }
    
        return true
    }
    
[/code]

* * *

リマインダー風のインターフェイスにするには、もうひと工夫、ふた工夫必要です。知恵を絞り出して、ユーザフレンドリーなインターフェイスを実現していってください。




テーブルに新しい行を挿入する方法を説明します。

[UITableView -
insertRows(at:with:)](https://developer.apple.com/reference/uikit/uitableview/1614879-insertrows)

`UITableView`クラスの、このメソッドを使用するのですが、使い方に二つのポイントがあります。ひとつは、挿入時のアニメーションをするために、`beginUpdates()`と、`endUpdates()`で挟んでやるということ。もうひとつは、テーブルに表示する元データに対する新データの挿入も、同時に行うということです。  
以下、サンプルコードを示します。コード中、`tableView`は、プロパティとして宣言したテーブルビュー自身、`tableData`は、テーブルに表示する元データ。文字列`String`の配列`[String]`とします。また、`UITextField`を貼り付けたセルは、`UITableViewCell`のサブクラス`CustomCell`としており、`CustomCell`は、プロパティ`textField`を持っています。

[code]

    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        tableView.beginUpdates() // アニメーション開始。
        // テーブルの最終行を、IndexPathとして取得。
        let lastRowIndex = tableView.numberOfRows(inSection: 0)
        let indexPath = IndexPath(row: lastRowIndex, section: 0)
        // 行を最終行の次に挿入。
        tableView.insertRows(at: [indexPath], with: .automatic)
        // 元データにも挿入。
        tableData.insert("", at: lastRowIndex)
        tableView.endUpdates() // アニメーション終了。
        // 新しい行のテキストフィールドを、テキスト入力状態にする。
        if let cell = tableView.cellForRow(at: indexPath) as? CustomCell {
            cell.textField.becomeFirstResponder()
        }
    
        return true
    }
    
[/code]

* * *

リマインダー風のインターフェイスにするには、もうひと工夫、ふた工夫必要です。知恵を絞り出して、ユーザフレンドリーなインターフェイスを実現していってください。

