2010-02-22 89 views
6

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

我有一个防范措施。如果没有UIKeyboard存在,则tableView不能滚动得足够远以至于不得不重绘单元格。但是,有些用户不使用键盘上的完成键来使键盘消失,而是将表格向上滚动,从而中断程序。

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

我没有这个视图的NIB文件,它是一个程序化的tableViewController,所以我不能在Interface Builder中用不可见的自定义按钮做任何事情,就像在StackOverflow的其他问题中所建议的那样。

回答

5

你是否正在实例化cellForRowAtIndexPath :: method中的文本字段?如果是这样,它可能会重新实例化每次单元格滚动查看。

应保存您的控制器上的文本字段的引用和你的cellForRowAtIndexPath ::

+0

我使用case语句块将textField添加到Section 0的第2行.textField在头中作为指针声明,因此可以使用myTextField.text访问属性。 这有帮助吗? – Justin 2010-02-22 21:55:28

+0

我不太关注。你是否在你的cellForRowAtIndexPath方法中说你有一个case语句来决定你是否在Section 0,Row 2,如果是,它会添加文本字段? 如果是这样,你在哪里调用[[UITextField alloc] init]?如果它也在cellForRowAtIndexPath方法中,那么每次行滚动到视图中时(或者调用cellForRowAtIndexPath),您可能会重新初始化文本字段。 尝试在loadView或控制器的主init方法中初始化文本字段。 – chrissr 2010-02-22 22:12:07

0

回答这个问题是实现了滚动委托方法willBeginDragging重用。 UITableView从UIScrollView继承。

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

这只要开始的tableView滚动

通过这种继承驳回键盘,也可以从滚动,期间保持的tableView。在scrollEnabled属性设置为NO,一拉

self.tableView.scrollEnabled = NO; 
0

您应该设置的委托NSTextField创建到控制器,然后实现在您的控制器textField:shouldChangeCharactersInRange:replacementString:,让你通知随时在文本字段的变化。

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

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

请记住,与可可你需要保持你的模型数据与你的看法分开。

+0

但是当textField向上滚动时会发生什么情况,并且值被删除。实例变量是否也会失去它的价值? – Justin 2010-02-23 04:32:35

+0

不,委托调用textField:shouldChangeCharactersInRange:replacementString时,应该将字符串从文本字段复制到实例属性中,以便在删除UITableViewCell后它将有效。 – 2010-02-25 00:27:01