1

我正在使用 rangeofString 和 textfield: shouldChangeCharactersinRange: 来限制在文本字段中有效的击键类型。

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


    NSString *includeString = @"1234567890-()+" ;

    if ([includeString rangeOfString:string].location == NSNotFound) {
        return NO;
    }

return YES;

}

这很好用,除了我现在不能使用删除键。任何想法如何表示删除键以将其添加到 includeString 中?

我试过了

`NSString *includeString = @"1234567890-()+\b"

但这不起作用 - 它也不允许出现我认为奇怪的 \ 或 b 字符

谢谢

4

1 回答 1

5

删除字符时替换字符串string空。由于rangeOfString:string返回NSNotFound空字符串,因此您必须首先检查这种情况:

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

    if ([string length] == 0)
        return YES;
    NSString *includeString = @"1234567890-()+" ;
    if ([includeString rangeOfString:string].location == NSNotFound) {
        return NO;
    }
    return YES;
}

更新:正如@rmaddy 正确指出的那样,如果将多个字符粘贴到文本字段中,上述方法将失败。以下方法检查 替换字符串的所有字符是否都有效。(可能有很多解决方案,这只是其中之一。)

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

    static NSString *includeString = @"1234567890-()+";
    NSCharacterSet *includeSet = [NSCharacterSet characterSetWithCharactersInString:includeString];
    if ([[string stringByTrimmingCharactersInSet:includeSet] length] > 0)
        return NO;
    return YES;
}

请注意,空字符串不再需要单独处理。

于 2013-11-13T21:38:01.957 回答