UIControlEventEditingChanged使用的UITextField的时候的setT

2019-07-20 17:31发布

我目前正在跟踪一个文本框的状态。

我使用的是自定义的日期选择器,其通过设置文本-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不会被调用。 但是,如果我用我的电脑键盘更改文本它被调用的某些原因。

这是故意的吗?

Answer 1:

我因为这是超级重要率这个问题了。

看来这已经在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



Answer 2:

只需拨打sendActionsForControlEvents:之后您设置的文本:

self.textField.text = xxx;
[self.textField sendActionsForControlEvents:UIControlEventEditingChanged];

经测试在iOS 9。



Answer 3:

在斯威夫特2.2+,基于@ Shaolo的答案

  1. 连接IBAction为,注意默认事件类型更改为EditingChanged

  1. 您更改密码文本框的文本后,还可以添加sendActionsLine

     taskTextField.text = nil taskTextField.sendActionsForControlEvents(UIControlEvents.EditingChanged) 


Answer 4:

该文件说:

 UIControlEventEditingChanged A touch making an editing change in a UITextField objet. Available in iOS 2.0 and later. Declared in UIControl.h. 

所以只接触



Answer 5:

更新:雨燕4.2

textField.text = "some Text"
textField.sendActions(for: UIControl.Event.editingChanged)


文章来源: UIControlEventEditingChanged doesn't get fired when using setText of UITextfield