在UITableViewCell值中更改UITextField不会在iOS 7中触发KVO

时间:2013-09-19 17:41:18

标签: objective-c uitextfield ios7 key-value-observing

我有一个UITableView,其中包含包含文本字段的单元格。当用户编辑每个文本字段时,我需要跟踪单元格的文本字段值(即使单元格不再显示,因此只是跟踪文本字段不起作用)。所以我使用了Key-Value Observing并为我的UITableViewController子类中的每个文本字段设置了一个观察者:

[cell addObserver:self forKeyPath:@"textField.text" options:NSKeyValueObservingOptionNew context:nil];

并在班级的observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context方法中保存对文本字段的新更改。

这在iOS 6中很有用,但在iOS 7中,当用户更改文本字段值时,不会调用KVO。显然,通过按键盘上的“完成”调用的setter方法不再调用KVO。

这有解决方法吗?或者更好的方式来倾听这种变化?我需要知道文本字段属于哪个单元格,因此实现文本字段的方法editingDidEnd对我不起作用。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我不确定是否有针对此的解决方法,但肯定有更好的方法来监听UITextField文本值。如果要以编程方式创建UITextField实例,您只需为它们添加一个事件处理程序,以通知您的类有关文本更改事件的信息。例如:

[myTextField addTarget:self action:@selector(editingChanged:) forControlEvents:UIControlEventEditingChanged];


- (void)editingChanged:(UITextField *)sender {
  NSString *targetText = sender.text;
}