当字段更新时,UITextField“值更改”不会触发

我有一个IBAction ,我已经连接到Interface Builder中的UITextField元素。 (射击“价值改变”事件)

我还有一个UISlider ,当它的值被调整时,会自动更新TextField元素。

当我运行我的应用程序时,TextField会在我调整滑块时得到更新,但是当发生这种情况时,“值更改”事件不会触发。 手动编辑TextField时,值更改事件也不会触发。 (尽pipe使用“编辑结束”触发器确实会触发它)。

我的问题是,我怎样才能获得值更改触发器触发的TextField的编程更新以及当用户调整值。

如TheRonin所build议的,使用UITextFieldDelegate并实现以下方法

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

不要对UITextField使用UIControlEventValueChanged 。 你想要的是UIControlEventEditingChanged

要获得EditingChanged textfield event ,我build议添加select器

 [textField addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventEditingChanged]; 

当文本字段值改变时,你将从这个textChanged:select器中获得改变的值。

 -(void)textChanged:(UITextField *)textField { NSLog(@"textfield data %@ ",textField.text); } 

如果您正在为文本字段分配一个委托,请注意(当您从下面的委托方法返回NO时,不会触发事件(编辑已更改)。当您从此方法返回NO时,请考虑调用事件侦听器

 (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

对于Swift 3

 textField.addTarget(self, action: #selector(textChanged), for: .valueChanged) func textChanged() { .... } 

一个古老的问题,但我发现的第一个search结果,没有一个答案是令人满意的。 我发现这个解决scheme最好的工作: Swift UITextField子类以编程方式处理文本更改 。

重写UITextField的文本属性以添加didSet(),并从那里调用您的值更改函数。

  override open var text: String? { didSet { myValueDidChange() } }