我正在使用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字符出现我认为奇怪的
由于
答案 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;
}
请注意,空字符串不再需要单独处理。