检测 UITextField 内容变化

Detecting UITextField content changes

当用户在文本字段中输入内容时,我的应用程序一直崩溃,显示 "NSInvalidArgumentException" 和 "unrecognized selector sent to instance ..."。我正在尝试检测用户何时确实键入了某些内容,以便 运行 一些代码。我在 Whosebug 上查看了这方面的内容,下面的代码是我发现的结果。

viewDidLoad()

adminPinField.delegate = self
adminPinField.addTarget(self, action:"pinChanged", forControlEvents:UIControlEvents.EditingChanged)

pinChanged 方法

func pinChanged(textField: UITextField) {
    //code
}

Class声明

class ViewController: UIViewController, UITextFieldDelegate

为什么会出现此错误,我该如何解决?

当你调用包含参数的方法时,你必须添加:,改变你的方法如下:

adminPinField.addTarget(self, action:"pinChanged:", forControlEvents:UIControlEvents.EditingChanged)

而且您不需要为此使用 UITextFieldDelegate

我想你只是把冒号 (:) 放在函数名后面,然后这样试试

adminPinField.delegate = self
adminPinField.addTarget(self, action:"pinChanged:", forControlEvents:UIControlEvents.EditingChanged)

方法也是这样写的

func pinChanged(textField: UITextField) {
    //paste your code here
}

对你有帮助。谢谢

我认为你的行动号召应该是

   adminPinField.addTarget(self, action:"pinChanged:", forControlEvents:UIControlEvents.EditingChanged)

添加 : 这在调用时也可用 例如:

   mybutton.addTarget(self, action: "userbuttonClicked:", forControlEvents: UIControlEvents.TouchUpInside)
   func userbuttonClicked(sender:UIButton) { }

然后在 textFieldDidChange: 方法中,您可以检查 textField 的内容,并根据需要重新加载您的内容。

在Objective-c

[adminPinField addTarget:self 
          action:@selector(textFieldDidChange:) 
          forControlEvents:UIControlEventEditingChanged];

-(void)textFieldDidChange:(UITextField *)textField{

    NSLog (@"%@",adminPinField.text);
}

在Swift中:

adminPinField.addTarget(self, action:"textFieldDidChange:", forControlEvents:UIControlEvents.EditingChanged)

如果将内容粘贴到文本字段内,这将不会检测到任何更改。要检测该文本更改以执行如下操作:

[textField addObserver:self forKeyPath:@"text" options:0 context:nil];

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
   if([keyPath isEqualToString:@"text"] && object == textField) {
    // text has changed
 }
}

希望对您有所帮助