在其中一个单元格中编辑UITextField时,可以动态重新加载UITable

Saz*_*aze 6 iphone cocoa-touch uitableview uitextfield

我有一个UITable包含一些海关UITableCells.这些单元格包含一些UILabel和一个UITextField.该表的数据源来自主控制器的属性.(此控制器也是表的委托和dataSource).

这是UI的简化屏幕截图:

schreenshot

现在,当用户编辑其中一个UITextField时,我需要"动态"更新所有UILabel的内容.为此,我正在收听UITextField级别的"编辑已更改"事件.这会触发以下操作:

- (IBAction) editChangeHandler: (id) sender {
    MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    [[delegate.viewController.myDataSourceArray objectAtIndex:self.rowIndex] setANumber: [theTextField.text intValue]];
    [delegate.viewController reloadRows];
}
Run Code Online (Sandbox Code Playgroud)

viewController中的reloadRows方法如下:

- (void) reloadRows {
    NSLog(@"called reloadRows");
    //perform some calculations on the data source objects here...
    [theUITable reloadData];
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,每当用户更改字段中的值时,都会成功调用reloadRows方法,因此显然是reloadData,但它也会导致键盘被解除.

因此,最后,用户只能在键盘解除并重新加载表格之前编辑TextField时触摸一个键.

有人知道解决方案或遇到过同样的问题吗?

Mar*_*ell 3

您可以根据需要有选择地修改行,而不是更新整个表(这样做是更新您当前正在使用的单元格,重置其状态)。

看着:

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation
Run Code Online (Sandbox Code Playgroud)

此外,您可以通过以下方式获取单元格来直接编辑这些单元格:

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

如果您不想重建这些单元格。