shouldChangeCharactersInRange没有得到最后一个数字

时间:2014-05-01 00:50:35

标签: objective-c

我有这个代码应该准确捕获用户输入的内容:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSLog(@"Catch -> %@",textfield.text);

}

但是当用户将字母数字 A 时,控制台会返回我(' null'),当用户将字母 AB 数字时, console只返回字母 A ,在这种情况下,方法shouldChangeCharactersInRange不会返回用户输入的最后一个字母。

要更改此设置,我尝试将代码更改为:

NSLog(@"Catch -> %@",string);

在这种情况下,控制台只显示最后一个数字。如何解决这个问题并选择用户数字的完整句子?

2 个答案:

答案 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将包含您的期望。它以这种方式完成,以便在文本字段的文本更新之前和之后可以理解任何形式的输入(甚至粘贴到文本的中间)