UITextField
的验证存在问题。我想验证UITextField's
文本长度为5(固定)。
我的代码:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(textField==codeTxt)
{
NSCharacterSet *unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet] ;
if ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] > 1)
return NO;
else if ([codeTxt.text length] >= 5])
return NO;
else
return YES;
}
}
此代码工作正常。它验证并忽略了其余的文本(更多的是5)。
我的问题: 当我按Delete(退格键)时,没有任何反应!文字保持不变。删除(退格)不起作用。
可能是什么问题?
...谢谢
答案 0 :(得分:4)
将此条件放在shouldChangeCharactersInRange方法
中的第一个语句中- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if([string length]==0)
{
return YES;
}
if(textField==codeTxt)
{
NSCharacterSet *unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet] ;
if ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] > 1)
return NO;
else if ([codeTxt.text length] >= 5])
return NO;
else
return YES;
}
}
答案 1 :(得分:1)
您只需检查字段中当前文本的长度。在文本更改之前调用此方法,因此您需要先检查replacementString
的长度,然后检查textField
的文本长度。
试试这个:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if (textField == codeTxt) {
// NSCharacterSet *unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS] invertedSet];
// if ([[string componentsSeparatedByCharactersInSet:[unacceptedInput count]] > 1) {
if ([[string componentsSeparatedByCharactersInSet:[[[NSCharacterSet characterSetWithCharactersInString:NUMBERS] invertedSet] autorelease]] count] > 1) {
return NO;
} else if ([string length] < 5) {
return YES;
} else if ([codeTxt.text length] >= 5]) {
return NO;
} else {
return YES;
}
}
}
在执行textField
后可能甚至不需要检查[codeTxt.text length] >= 5]
的长度,因为这样可以防止textField
的长度始终超过4。< /击>
实际上,您需要检查它,因为默认值为return YES;
。
可能需要&lt; = 5
} else if ([string length] <= 5) {
return YES;
}
而不是&lt; 5也是
} else if ([string length] < 5) {
return YES;
}
答案 2 :(得分:0)
我得到了解决方案
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(textField==codeTxt)
{
NSCharacterSet *unacceptedInput = [[NSCharacterSet characterSetWithCharactersInString:NUMBERS]invertedSet] ;
NSLog(@"textfield character validation method called");
NSLog(@"%d",[codeTxt.text length]);
if ([[string componentsSeparatedByCharactersInSet:unacceptedInput] count] > 1)
return NO;
else if ([codeTxt.text length] >= 5 && ![string isEqual:@""])
return NO;
else
return YES;
}
}