iPhone - uitableViewCell中的textField - 滚动屏幕会清除该值

时间:2010-02-22 21:47:20

标签: iphone uitableview uitextfield

我在tableViewCell中有一个textField。我最近注意到,如果我在textBox中输入一个值,然后在屏幕上滚动单元格,文本框中的值就会消失。

我有防范这一点。如果没有UIKeyboard,则tableView无法滚动到足以重绘单元格。但是,有些用户不使用键盘上的完成键来使键盘消失,而是向上滚动表格,打破程序。

有没有办法立即将textField字符串存储到变量中,或者保持tableView不滚动,或者如果用户试图滚动tableView,键盘会消失?

我没有这个视图的NIB文件,它是一个程序化的tableViewController,因此我无法在Interface Builder中使用隐形自定义按钮执行任何操作,如StackOverflow上的其他问题所示。

3 个答案:

答案 0 :(得分:5)

您是否在cellForRowAtIndexPath ::方法中实例化了文本字段?如果是这样,则可以在每次单元格滚动到视图时重新实例化。

您应该保存对控制器上文本字段的引用,并在cellForRowAtIndexPath ::

中重复使用它

答案 1 :(得分:0)

这个问题的答案是实现ScrollView委托方法willBeginDragging。 UITableView继承自UIScrollView。

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
       [textField resignFirstResponder];
}

一旦tableView开始滚动

,就会解除键盘

通过这种继承,还可以保持tableView不滚动,周期。将scrollEnabled属性设置为NO,a la

self.tableView.scrollEnabled = NO;

答案 2 :(得分:0)

您应该将您创建的NSTextField的委托设置到控制器,然后在控制器中实现textField:shouldChangeCharactersInRange:replacementString:,以便在文本字段中的文本发生更改时随时通知您。

当文本更改时,将更改的文本存储在控制器的属性中。

NSTextField中创建cellForRowAtIndexPath时,请设置该属性的值。

请记住,使用Cocoa,您需要将模型数据与视图分开。