检测 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
}
}
希望对您有所帮助
当用户在文本字段中输入内容时,我的应用程序一直崩溃,显示 "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
}
}
希望对您有所帮助