使用rangeOfString和textfield shouldChangeCharactersInRange - 删除字符?

时间:2013-11-13 21:22:04

标签: ios objective-c nsstring textfield

我正在使用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字符出现我认为奇怪的

由于

1 个答案:

答案 0 :(得分: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正确指出的那样,如果不止一个,上述方法就会失败 字符粘贴到文本字段中。以下方法检查 all 替换字符串的字符有效。 (可能有很多解决方案, 这只是其中之一。)

-(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;
}

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