iPhone键盘滤镜问题

时间:2009-10-13 02:22:33

标签: iphone keyboard filtering

我想限制用户可以在iPhone键盘中输入的字符,所以我创建了一个自己的数组。例如该数组包括0~9和一个点,使用户可以输入价格。如果替换字符串不在数组中,我可以return NO -(BOOL)textField:shouldChangeCharactersInRange:replacementString:

问题是当我使用此数组过滤文本时,也会禁用退格按钮。有关如何启用退格按钮的任何想法?

另一个问题是我想让用户输入他们的名字,因此我不想让他们切换到数字和标点符号(如果我使用数组进行过滤,则退格按钮也会被锁定)。如何禁用键盘上的开关按钮(现在我只是限制它们键入一个~z,空白和“。”,但我认为禁用开关按钮可能是更好的方法)?

3 个答案:

答案 0 :(得分:1)

我找到了一种方法(可能不够好,但它可以完成退格函数的工作):

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if(textField == txtChargeAmt)
    {
        if(string.length == 0)  //backspace button is pressed
        {
            textField.text = [textField.text substringToIndex:(textField.text.length - 1)];
            return NO;
        }

        for(NSString *s in arrNumberAndDot)
        {
            if([string isEqualToString:s])
            {
                return YES;
            }
        }
        return NO;
    }
    else
        return YES;
}

欢迎关于退格问题的其他想法。那么如何禁用开关按钮?

答案 1 :(得分:0)

我想我不确定为什么你会想要为这两种不同类型的输入使用相同的TextField。

我会有两个字段,一个用于输入名称的字母数字字段和一个用于输入数字的数字字段。

或者我没有收到你的问题?

答案 2 :(得分:0)

这将做你想要的更简洁(和有效):

- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
    NSCharacterSet *validCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@".0123456789"];

    BOOL shouldChange = 
        [string length] == 0 || // deletion
        textField != txtChargeAmt || // not the field we care about
        [string rangeOfCharacterFromSet:validCharacterSet].location != NSNotFound;

    if (!shouldChange)
    {
        // Tell the user they did something wrong.  There's no NSBeep() 
        // on the iPhone :(
    }

    return shouldChange;
}

我会在其他地方构建这个角色,所以你只需要做一次,但你明白了。任何人都有任何想法,如何提醒用户他们使用了无效的字符?我正试图解决类似的问题。