我目前正在跟踪一个文本框的状态。
我使用的是自定义的日期选择器,其通过设置文本-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");
}
如果我通过自定义的日期选择器的方法更改文本travelToOnDateTextFieldDidChange
不会被调用。 但是,如果我用我的电脑键盘更改文本它被调用的某些原因。
这是故意的吗?
我因为这是超级重要率这个问题了。
看来这已经在iOS6的改变。 甚至iOS5的。 此事件曾经被用于观察一个的UITextField文本变化的优选方法。 我一直在使用它,因为IOS3。 重新编译在iOS6的我的应用程序来执行一些更新后,神秘地停止工作。 我的应用程序使用的部件:
[UITextField insertText];
和其他人使用
[UITextField setText];
要么
UITextField.text = @"xxx";
不管出于什么原因,要注意的setText事件不再触发编辑Changed事件是很重要的。 如果您使用的insertText方法,它仍然有效。
所以,如果你陷入困境,你只需要一个快速解决方案,可以从改变你的代码:
textField.text;
要么
[textField setText:@"xxx"];
至
textField.text = @"";
[textField insertText:@"new text"];
这也适用:
[((UITextField*)view) sendActionsForControlEvents:UIControlEventEditingChanged];
我希望这可以帮助别人,因为我浪费了一整天试图找出为什么这个代码突然停止工作,当我上升到iOS6的。
你仍然可以使用NSNotificationCenter为好。 详情参见给出UITextField参考:
https://developer.apple.com/documentation/uikit/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.
所以只接触 ?
更新:雨燕4.2
textField.text = "some Text"
textField.sendActions(for: UIControl.Event.editingChanged)
文章来源: UIControlEventEditingChanged doesn't get fired when using setText of UITextfield