我在这里有点不知所措,我显然做错了什么,并没有理解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
答案 0 :(得分:3)
你在以下代码行中犯了错误:
if ([string rangeOfString:includeString].location == NSNotFound)
将其更改为以下内容:
if ([includeString rangeOfString:string].location == NSNotFound)
另请注意,用户不仅可以键入文本,还可以从某处复制/粘贴文本。所以字符串的长度可能大于1.