表示されているセルのみを更新する必要がありますが、すべてを更新する必要はありません。コンテンツの計算式が非常に単純であると仮定します。
-(NSString*) textForRowAtIndex:(int)rowIndex
{
return [NSString stringWithFormat:@"%d", startRowValue + rowIndex];
}
そして、各セルにはUITextField
タグ付きのオブジェクトが含まれていますindexPath.row + 100
:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* cellId = @"cellId";
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellId];
if(!cell)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId] autorelease];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UITextField* tf = [[[UITextField alloc] initWithFrame:CGRectMake(10, 8, 280, 30)] autorelease];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldTextDidChange:)
name:UITextFieldTextDidChangeNotification object:tf];
tf.delegate = (id)self;
[cell.contentView addSubview:tf];
}
UITextField* tf = (UITextField*)[[cell.contentView subviews] lastObject];
tf.tag = indexPath.row + 100;
tf.text = [self textForRowAtIndex:indexPath.row];
return cell;
}
次に、表示されているすべてのセルをtextFieldTextDidChange:
メソッドで更新します。
-(void) textFieldTextDidChange:(NSNotification*)notification
{
UITextField* editedTextField = (UITextField*)[notification object];
int editedRowIndex = editedTextField.tag - 100;
int editedValue = [editedTextField.text intValue];
startRowValue = editedValue - editedRowIndex;
for (NSIndexPath* indexPath in [self.tableView indexPathsForVisibleRows])
{
if(indexPath.row != editedRowIndex)
{
UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];
UITextField* textField = (UITextField*)[cell.contentView viewWithTag:indexPath.row+100];
textField.text = [self textForRowAtIndex:indexPath.row];
}
}
}
50個のセルを作成しましょう。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 50;
}
そして、編集が終了したらキーボードを非表示にしましょう。
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
楽しみ!