Iphone 在UITextField(iOS)中检测当前输入字符

Iphone 在UITextField(iOS)中检测当前输入字符,iphone,ios,input,keyboard,uitextfield,Iphone,Ios,Input,Keyboard,Uitextfield,我想知道用户刚刚输入的当前输入字符。比较新旧输入字符串似乎有效,但这肯定是我最不想尝试的。有什么建议吗?我想iOS SDK中有一些方法可以更好地做到这一点 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 从UITEXTFIELD中,代表应帮助您 它不仅用于替换文本,而且在用户按下键盘上的键时也会

我想知道用户刚刚输入的当前输入字符。比较新旧输入字符串似乎有效,但这肯定是我最不想尝试的。有什么建议吗?我想iOS SDK中有一些方法可以更好地做到这一点

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
从UITEXTFIELD中,代表应帮助您

它不仅用于替换文本,而且在用户按下键盘上的键时也会被调用。 (此时范围长度为0,位置为当前插入位置)

有关更多信息,请参阅文档:

如果要在输入字符时比较字符串,最好使用

[textField addTarget:self action:@selector(compareInput) forControlEvents:UIControlEventEditingChanged];

-(void)compareInput
{
    if ([textField.text isEqualToString:compareString])
        NSLog(@"They're the same!");
}
与代表相比:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
如果您只是想比较字符,那么委托方法就可以了。变量
字符串
包含键入的字符

例如,当用户在UITextField中键入
foo
时,上述方法会发生这种情况:

用户类型:
f
,发生以下情况:

[textField addTarget:self action:@selector(compareInput) forControlEvents:UIControlEventEditingChanged];
[textField addTarget:self action:@selector(compareInput) forControlEvents:UIControlEventEditingChanged];
立即调用
compareInput
,可通过textField.text获取字母
f

-(void)compareInput
{
    NSLog(textField.text); //prints `f`
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSLog(textField.text); //prints nothing
    return YES;
    //after returning YES, textField.text will contain `f`
}
用户类型:
o
,发生以下情况:

[textField addTarget:self action:@selector(compareInput) forControlEvents:UIControlEventEditingChanged];
[textField addTarget:self action:@selector(compareInput) forControlEvents:UIControlEventEditingChanged];
立即调用
compareInput
,字符串
fo
可通过textField.text获得:

    -(void)compareInput
{
    NSLog(textField.text); //prints `fo`
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSLog(textField.text); //prints `f`
    return YES;
    //after returning YES, textField.text will contain `fo`
}

我可能不太清楚,但我希望它能给你一些启示

此方法将在UITextField中显示当前输入

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *letters;
    if ([textField.text isEqualToString:@""]){
        letters = string;
    }else if ([string isEqualToString:@""]){
        if ([textField.text length] > 0) {
            letters = [textField.text substringToIndex:[textField.text length] - 1];
        }
    }else{
        letters = [textField.text stringByAppendingString:string];
    }

    NSLog(@"letters %@\n", letters);

    return YES;
}

@Thyraz
-(BOOL)textField:(UITextField*)textField shouldChangeCharactersRange:(NSRange)range replacementString:(NSString*)string{}
我想知道当前的输入字符,这个方法帮助很大@TRedman感谢您对我的深入了解。
-(BOOL)textField:(UITextField*)textField shouldChangeCharactersRange:(NSRange)range replacementString:(NSString*)
最后一个参数字符串是当前输入!在渲染下一个角色之前检测。有没有其他的检测方法?