我有这个代码应该准确捕获用户输入的内容:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSLog(@"Catch -> %@",textfield.text);
}
但是当用户将字母数字 A 时,控制台会返回我(' null'),当用户将字母 AB 数字时, console只返回字母 A ,在这种情况下,方法shouldChangeCharactersInRange不会返回用户输入的最后一个字母。
要更改此设置,我尝试将代码更改为:
NSLog(@"Catch -> %@",string);
在这种情况下,控制台只显示最后一个数字。如何解决这个问题并选择用户数字的完整句子?
答案 0 :(得分:3)
在文本字段更改之前调用此方法。如果你说英语,你只需要阅读方法名称就已经知道了,这是Cocoa的一大优势......
此方法让您有机会说“不,不要更改此文本框中的文字!”或者在更改之前更改框中的文本,或更改在添加之前添加的文本。
textfield.text
在此方法返回之前不会反映更改。
要抓住编辑文本字段事件的END,请将其放在viewDidLoad
:
[yourTextField addTarget:self
action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged];
其中yourTextField
是对感兴趣的文字字段的引用。
现在写下方法:
- (void)textFieldDidChange:(UITextfield *)textfield {
NSLog(@"Catch -> %@", textfield.text);
}
答案 1 :(得分:2)
这种委托方法通常以这样的方式开始:
- (BOOL)textField:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
NSString *candidateString = [textView.text stringByReplacingCharactersInRange:range withString:text];
现在,candidateString
将包含您的期望。它以这种方式完成,以便在文本字段的文本更新之前和之后可以理解任何形式的输入(甚至粘贴到文本的中间)