KMInputCell
UITextFieldsを持つカスタム UITableViewCells (タイプ ) を持つ任意の量の行が存在する 1 つのセクションを持つ単純な UITableView があります。ユーザーが最後の (空白の) テキスト フィールドに入力を開始すると、新しい空白行が挿入されます (これにより、ユーザーはリストのような構造を作成できます)。ビューを閉じたときにのみデータを「保存」するので、データ ソースはNSUInteger
行数を追跡するだけです。
ユーザーがテーブルから行を削除するまで、私のコードは正常に動作します。次に、ユーザーがリストの最後で入力を開始し、新しい (空白の) 行を挿入する必要がある場合、挿入された UITableView セルには、削除されたセルからの古いデータが含まれます。さらに悪いことに、複数の行が削除された後でユーザーが入力を開始すると (そして 1 つの空白行を挿入する必要があります)、削除された複数の行が突然存在するようになります。
以下はfieldChanged:
、セル内の UITextFields の 1 つが編集されたときに呼び出されるメソッドです (self.last_cell
セクション内の最後のセルを返します)。
- (IBAction)fieldChanged:(id)sender {
// get the text field of the last row
// if it has a value that is not blank, insert another row
KMInputCell* last_cell = self.last_cell;
if(![last_cell.textField.text isEqualToString:@""]){
[self.tableView beginUpdates];
NSIndexPath* new_cell_path = [NSIndexPath indexPathForItem:[self.tableView numberOfRowsInSection:0] inSection:0];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:new_cell_path] withRowAnimation:UITableViewRowAnimationAutomatic];
number_emails++;
[self.tableView endUpdates];
}
}
commitEditingStyle:
セルを削除するために使用されるメソッドは次のとおりです。
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
number_emails--;
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
添加
ここにあるcellForRowAtIndexPath:
:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"add_email_prototype";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];=
// Configure the cell...
return cell;
}