rangeOfString和NSNotFound结果不是我所期望的

时间:2013-11-12 13:06:38

标签: ios objective-c

我在这里有点不知所措,我显然做错了什么,并没有理解rangeOfString的工作方式。

我有很多文本字段,其中某些是电话和传真字段,我想只允许输入一小部分值1234567890 + - ()

如果字符超出指定的字符集,我试图使用textfield: shouldChangeCharactersInRange: replacementString:不返回字符。

我的方法在下面和下面是日志的一个例子。

不返回';'的代码工作正常,代码确保只有正在测试的电话和传真号码字段。

然而,发生的事情是我输入的字符无关紧要 - 字母或符号为'1'或'2',我得到的结果与NSNotFound相同。

知道我哪里错了吗?

干杯

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if ([string isEqualToString:@";"]) {
        return NO;
    }

    if( ([textField.placeholder isEqualToString:self.locationFieldNames[phoneNumber]]) | ([textField.placeholder isEqualToString:self.locationFieldNames[faxNumber]])){

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

        if ([string rangeOfString:includeString].location == NSNotFound) {
            DLog(@"%@ is NSNOTFOUND", string);
            return NO;
        } else {
            DLog(@"%@ is !NSNOTFOUND", string);
            return YES;
        }
    }
    DLog(@"got here");

    return YES;
}

和日志中的示例

2013-11-12 12:59:19.832 SplashDL[4138:70b] -[DiveFacilityDetailViewController textField:shouldChangeCharactersInRange:replacementString:] 1 is NSNOTFOUND

2013-11-12 12:59:24.556 SplashDL[4138:70b] -[DiveFacilityDetailViewController textField:shouldChangeCharactersInRange:replacementString:] q is NSNOTFOUND

2013-11-12 12:59:26.806 SplashDL[4138:70b] -[DiveFacilityDetailViewController textField:shouldChangeCharactersInRange:replacementString:] ! is NSNOTFOUND

1 个答案:

答案 0 :(得分:3)

你在以下代码行中犯​​了错误:

if ([string rangeOfString:includeString].location == NSNotFound)

将其更改为以下内容:

if ([includeString rangeOfString:string].location == NSNotFound)

另请注意,用户不仅可以键入文本,还可以从某处复制/粘贴文本。所以字符串的长度可能大于1.