使用UITextfield的setText时,UIControlEventEditingChanged不会被触发

时间:2013-02-28 16:03:17

标签: ios cocoa-touch uitextfield uidatepicker

我目前正在尝试跟踪文本字段的状态。

我使用的是自定义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。但是,如果我使用我的电脑键盘更改文本,它会因某种原因而被调用。

这是故意的吗?

5 个答案:

答案 0 :(得分:79)

我不得不对此问题进行评分,因为这是 super 重要。

在iOS6中看来这已经改变了。也许甚至iOS5。此事件 USED 是观察UITextField中文本更改的首选方法。我从iOS3开始就一直在使用它。在iOS6上重新编译我的应用程序以执行一些更新后,它神秘地停止了工作。我的应用程序的部分内容使用:

[UITextField insertText];

和其他人使用

[UITextField setText];

UITextField.text = @"xxx";

无论出于何种原因,重要的是要注意 setText 事件不再触发编辑更改事件。如果你使用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

答案 1 :(得分:16)

设置文字后,只需致电sendActionsForControlEvents:

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

在iOS 9上测试。

答案 2 :(得分:5)

在Swift 2.2+中,基于@ Shaolo的回答

  1. 连接IBAction,注意将默认事件类型更改为taskTextField.text = nil taskTextField.sendActionsForControlEvents(UIControlEvents.EditingChanged)
  2. enter image description here

    1. 从代码更改textField的文本后,添加sendActionsLine

      body > div.datepicker.datepicker-dropdown.dropdown-menu.datepicker-orient-left.datepicker-orient-bottom > div.datepicker-days > table > tbody > tr:nth-child(3) > td.day.today​
      

答案 3 :(得分:4)

文档说:

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

触摸

答案 4 :(得分:2)

更新:Swift 4.2

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