当用户在文本字段中输入内容时,我的应用程序不断崩溃,显示“NSInvalidArgumentException”和“无法识别的选择器发送到实例...”。我试图检测用户何时输入内容,然后运行一些代码。我已经在Stackoverflow上查看了这个,下面的代码是我发现的结果。
viewDidLoad中()
adminPinField.delegate = self
adminPinField.addTarget(self, action:"pinChanged", forControlEvents:UIControlEvents.EditingChanged)
pinChanged方法
func pinChanged(textField: UITextField) {
//code
}
班级宣言
class ViewController: UIViewController, UITextFieldDelegate
为什么我会收到此错误,如何解决?
答案 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) { }