我目前正在尝试跟踪文本字段的状态。
我正在使用自定义datePicker,它通过-setText
设置文本
[self.textField setText:[self.dateFormatter stringFromDate:self.date]];
在我的textFieldDelegate中,我编写了以下代码:
-(void)viewDidLoad {
[super viewDidLoad];
self.travelToOnTextField.delegate = self;
[self.travelToOnTextField addTarget:self action:@selector(travelToOnTextFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
}
-(void)travelToOnTextFieldDidChange:(id)sender
{
NSLog(@"Event Handler called");
}
如果我通过自定义Datepicker更改文本,则不会调用方法travelToOnDateTextFieldDidChange
。但是,如果我使用我的电脑键盘更改文本,它会因某种原因而被调用。
这是故意的吗?
我不得不对这个问题进行评分,因为这非常重要。
看来这在iOS6中已经发生了变化。也许甚至iOS5。此事件USED是在UITextField中观察文本更改的首选方法。我从iOS3开始就一直在使用它。在iOS6上重新编译我的应用程序以执行一些更新后,它神秘地停止了工作。我的应用程序部分使用:
[UITextField insertText];
和其他人使用
[UITextField setText];
要么
UITextField.text = @"xxx";
无论出于何种原因,重要的是要注意setText事件不再触发Editing Changed事件。如果使用insertText方法,它仍然有效。
因此,如果您处于绑定状态并且只需要快速修复,则可以从以下位置更改代码:
textField.text;
要么
[textField setText:@"xxx"];
至
textField.text = @"";
[textField insertText:@"new text"];
这也有效:
[((UITextField*)view) sendActionsForControlEvents:UIControlEventEditingChanged];
我希望这对某人有所帮助,因为我浪费了一整天的时间试图找出为什么当我升级到iOS6时这段代码突然停止工作。
您仍然可以使用NSNotificationCenter。有关更多信息,请参阅UITextField参考:
设置文本后,只需调用sendActionsForControlEvents:
:
self.textField.text = xxx;
[self.textField sendActionsForControlEvents:UIControlEventEditingChanged];
在iOS 9上测试过。
文件说:
UIControlEventEditingChanged A touch making an editing change in a UITextField objet. Available in iOS 2.0 and later. Declared in UIControl.h.
那么只触摸?
更新:Swift 4.2
textField.text = "some Text"
textField.sendActions(for: UIControl.Event.editingChanged)