UITableViewを連絡先エディタのテーブルのように動作させたい、つまりユーザーが編集を押して、新しいセクションを追加する行を各セクションの下部に表示する必要があります。UITableViewでの挿入行の使用
私はこれを行うには以下のコードを使用していますが、連絡先にあるように円滑な移行がないという問題があります。代わりに、新しい行が突然表示されます。アニメーションを取得するにはどうしたらいいですか?
また、「新しいカテゴリを追加する」行のクリックにどのように反応しますか?現在の実装では行はクリックできません。
ユーザーが編集を開始するときにデータを再読み込みする必要がありますか?私はそうしないと挿入行が決して描画されないので、これをやっています。
ありがとうございました。行上のクリックに応答
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:animated];
[self.tableView setEditing:editing animated:animated];
[tableView reloadData];
}
- (NSInteger)tableView:(UITableView *)_tableView numberOfRowsInSection:(NSInteger)section {
// ...
if(self.tableView.editing)
return 1 + rowCount;
}
- (UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// .....
NSArray* items = ...;
if(indexPath.row >= [items count]) {
cell.textLabel.text = @"add new category";
}
// ...
return cell;
}
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
NSArray* items = ...;
if(indexPath.row == [items count])
return UITableViewCellEditingStyleInsert;
return UITableViewCellEditingStyleDelete;
}
これは(以下、答えと一緒に)非常に有用だった:
あなたのコードは、小さな変更を必要とします。 'tableView:editingStyleForRowAtIndexPath:'は '=='を使いますが、 'tableView:cellForRowAtIndexPath:'の行数との比較は '> ='を使います。大きな問題ではありませんが、それらの間で一貫している必要があります。 '> ='はInsert行の偶発的な二重追加をカバーし、 '=='はその状況につながるコードエラーの例外を投げることによって助けになります。 –