检测UITextField内容更改

时间:2015-06-18 11:01:14

标签: ios swift uitextfield uitextfielddelegate

当用户在文本字段中输入内容时,我的应用程序不断崩溃,显示“NSInvalidArgumentException”和“无法识别的选择器发送到实例...”。我试图检测用户何时输入内容,然后运行一些代码。我已经在Stackoverflow上查看了这个,下面的代码是我发现的结果。

viewDidLoad中()

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

pinChanged方法

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

班级宣言

class ViewController: UIViewController, UITextFieldDelegate

为什么我会收到此错误,如何解决?

4 个答案:

答案 0 :(得分:4)

当您调用包含参数的方法时,您必须添加:,如下所示更改您的方法:

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

您无需使用UITextFieldDelegate

答案 1 :(得分:2)

我认为你只需将冒号(:)放在函数名后面,然后尝试这样做

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

和方法写得像那样

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

对你有帮助。感谢

答案 2 :(得分:1)

然后在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
 }
}

希望有所帮助

答案 3 :(得分:0)

我认为你的行动应该是

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

添加调用时也可以使用此示例:

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