Iphone UITextField值已更改事件?

Iphone UITextField值已更改事件?,iphone,uitextfield,Iphone,Uitextfield,如何使文本字段的内容发生变化时调用函数?Objective-C [myTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; Swift 4 myTextField.addTarget(self, action: #selector(textFieldDidChange(sender

如何使文本字段的内容发生变化时调用函数?

Objective-C

[myTextField addTarget:self 
                action:@selector(textFieldDidChange:) 
      forControlEvents:UIControlEventEditingChanged];
Swift 4

myTextField.addTarget(self, action: #selector(textFieldDidChange(sender:)), for: .editingChanged)

@objc func textFieldDidChange(sender: UITextField) {...}
textField.addTarget(self, action: #selector(self.textFieldDidChange(sender:)), for: .editingChanged)

@objc func textFieldDidChange(sender: UITextField){
   print("textFieldDidChange is called")
}

实际上,
UITextField
没有值更改事件,使用
UIControlEventEditingChanged

我解决了更改shouldChangeChractersInRange行为的问题。如果您返回否,iOS将不会在内部应用更改,相反,您有机会手动更改并在更改后执行任何操作

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    //Replace the string manually in the textbox
    textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];
    //perform any logic here now that you are sure the textbox text has changed
    [self didChangeTextInTextField:textField];
    return NO; //this make iOS not to perform any action
}

对斯威夫特来说,这很方便-

textField.addTarget(self, action: #selector(onTextChange), forControlEvents: UIControlEvents.EditingChanged)
这是我的解决方案

Swift 4

myTextField.addTarget(self, action: #selector(textFieldDidChange(sender:)), for: .editingChanged)

@objc func textFieldDidChange(sender: UITextField) {...}
textField.addTarget(self, action: #selector(self.textFieldDidChange(sender:)), for: .editingChanged)

@objc func textFieldDidChange(sender: UITextField){
   print("textFieldDidChange is called")
}

奇怪的是,基于UIControlEventDidEnd和UIControlEventDidBegin,人们会假设它是UIControlEventValueChanged。。。UIControlEventValueChanged到底做了什么?@kovpas如果我们以编程方式更改值,那么它就不会得到调用,知道该做什么吗?。例如,myTextField.text=“Krishna”请注意,设置文本属性会将光标移动到文本的末尾,这可能会影响编辑您可以自己处理它