根据输入的字符限制用户输入时显示的UITextField

时间:2014-07-03 03:56:11

标签: ios objective-c uitextfield

我想知道是否可以根据用户输入的字符限制UITextField显示的内容为他们正在输入。例如,我想排除角色"!"从UITextField中显示出来,所以当用户输入" Nice!"时,她在文本字段中看到的只是" Nice",旁边的闪光灯& #34; E"

我试图使用shoudChangeCharactersInRange并试验一些基本的东西,例如将所有输入的单词转换成小写,但还没有让它起作用。什么是最好的方法,特别是如果我想完全保留一些字母或字符?感谢

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    [self updateTextLabelsWithText: newString.lowercaseString];

    return YES;
}

2 个答案:

答案 0 :(得分:1)

更新答案

好的,你能不能试试这个版本,看看它是否处理了带有无效字符的字符串的额外粘贴?

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    BOOL shouldReplace = YES;

    NSRange invalidCharRange = [string rangeOfString:@"!"];

    if(invalidCharRange.length > 0)
    {
        shouldReplace = NO;

        NSString *cleanedString = [string stringByReplacingOccurrencesOfString:@"!" withString:@""];

        NSString *completeString = [[NSString alloc] initWithFormat:@"%@%@", textField.text, cleanedString];

        textField.text = completeString;
    }
    else
    {
        textField.text = [textField.text stringByReplacingOccurrencesOfString:@"!" withString:@""];
    }

    if([string isEqualToString:@"!"])
    {
        shouldReplace = NO;
    }

    return shouldReplace;
}

原始答案

如果替换字符串为"!":

,则设置为NO
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    BOOL shouldReplace = YES;

    if([string isEqualToString:@"!"])
    {
        shouldReplace = NO;
    }

    return shouldReplace;
}

答案 1 :(得分:1)

这个怎么样?

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSString *previousString_ = textField.text;
    NSString *upperCased_ = [string uppercaseString];
    previousString_ = [previousString_ stringByReplacingCharactersInRange:range withString:upperCased_];
    [textField setText:previousString_];

    return NO;
}

此代码会将较低的输入字符串更改为较高的字符串