これはおそらくX Yの問題だと思うので、最初にいくつかの背景情報を示します。テーブルビューのセルをもっとエレガントに追加/削除するにはどうすればよいですか?
「フォーム」を表示できるアプリを構築しています。ユーザーはフォームにいくつかのものを記入してカスタムのものを作成できます。
フォームにテーブルビューを使用するのが最も適切なことだと思います。また、各表のセルには、入力が必要なすべてのテキストボックスを表示できます。
ここではスクリーンショットです:それがタップされたとき
「新しい入力を追加」ボタンは下部に新しい電池を挿入します。入力の1つを左にスワイプすると、「削除」ボタンが表示されます。これを使用して入力を削除できます。
ご覧のとおり、このテーブルビューでは行の追加と削除が必要です。
元々、私はこれを簡単にする "TableViewModel"と呼ばれるココアポッドを使用していました。しかし、私はa really severe bugをライブラリに見つけましたので、もう使用したくありません。
テーブルビューのdeleteRowsAtIndexPaths
とinsertRowsAtIndexPaths
の方法を試しました。しかし、私はこのようにそれを行う場合:
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.text = "Hello"
return cell
}
// I use motionEnded here because I don't want to add a button or anything just to test this
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent?) {
tableView.deleteRowsAtIndexPaths([NSIndexPath(forRow: 0, inSection: 0)], withRowAnimation: .Fade)
}
それは私が1行を削除した後、テーブルビューは、データソースと矛盾しているという例外が発生します。つまり、この不一致を処理するコードが必要です。これは間違いなく私のコードを読みにくくするでしょう。
同じことが挿入方法になります。
また、各セクションにある行の数を把握する必要があります。そして、私のコードはちょうど本当に面倒で、すべてのもので維持できなくなります。
私は他のライブラリも検索しましたが、それらはすべて "tableViewModel"と同じくらい奇妙で、あまり単純ではありません。それらはすべて、テーブルビューのモデルを作成する必要があります。私は私の場合にそれをする方法を理解していません。私はちょうどたくさんのテキストフィールドを表示したい!
行を挿入したり削除したりするにはどうすればよいですか?私は、テーブルビューのextension
を書くか、テーブルビューのモデルを書くことを学ぶ必要があると思います。しかし、私はどちらの方法も実行できません。
データソースがないためです。論理的にも参照してください。insertRowsAtIndexPathsで新しい行を追加するとします。今は2行あります。ただし、numberOfRowsInSectionは常に1を返します。したがって、クラッシュし、その逆もあります。テーブルビューは、コレクション(NSArray、NSDictionary、NSSetなど)で動作するはずです。 – Alok
問題は、行を追加または削除すると、セクション内に1行しかないということです。配列やディクショナリを使用して、各行と各セクションのデータ(とデータ)の数を追跡し、その値を 'numberOfSectionsInTableView:'と 'tableView:' numberOfRowsInSection: 'に返します。 – Larme
テーブルビューを使用してこの種のフォームを実行しないでください。それから私は何をすることができますか? @Alok – Sweeper