1

我在这里有点茫然,我显然做错了什么并且没有掌握 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
4

1 回答 1

3

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

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

将其更改为以下内容:

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

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

于 2013-11-12T13:11:10.197 回答