在编辑UITableViewCell中的UITextField时动态重新加载UITable。

6

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

以下是UI的简化截图:

schreenshot

现在,当用户编辑其中一个UITextFields时,我需要“实时”更新所有UILabels的内容。 为此,在UITextField级别侦听“Editing Changed”事件。这将触发以下操作:

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

视图控制器中的reloadRows方法如下所示:
- (void) reloadRows {
    NSLog(@"called reloadRows");
    //perform some calculations on the data source objects here...
    [theUITable reloadData];
}

我的问题在于,每当用户更改字段中的值时,reloadRows方法都会成功调用,reloadData也会被调用,但这也导致键盘被关闭。
因此,在编辑TextField时,用户只能触摸一个键,然后键盘就会消失并重新加载表格。
有没有人知道解决方法或遇到过同样的问题?
2个回答

3
你可以有选择性地修改需要的行,而不是更新整个表格(这样做将更新您当前正在工作的单元格,重置其状态)。
看一下:
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

此外,您可以通过获取单元格直接编辑这些单元格,方法如下:
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath

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


啊!谢谢!键盘消失确实是由于单元格状态重置所解释的。我怎么可能没看到呢?:-) 由于我还需要更新当前行的标签,所以最终我采用了您的第二个建议,在控制器中编写了一个新方法,仅更新各行的标签。 - Saze

3
我遇到了同样的问题。在我的情况下,我试图创建一个通用控制器,因此手动重建单元格的特定方法不是一个好选择。
以下是我想出的解决方案:
1. 暂时使表格中其他单元格中的文本字段成为第一响应者。 2. 调用reloadRowsAtIndexPaths重新加载用户正在编辑的单元格。 3. 再次使用户正在编辑的字段成为第一响应者。
这个方法完美地解决了问题。键盘保持可见,没有任何闪烁,单元格得到适当的刷新,用户可以继续在原来正在编辑的字段中输入。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接