我正在为UITextField实现以下委托方法:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *integerPart = [textField.text componentsSeparatedByString:@"."][0];
NSString *decimalPart = [textField.text componentsSeparatedByString:@"."][1];
if ([integerPart length] > 8 || [decimalPart length] > 5) {
return NO;//this clause is always called.
}
...
}
我正在尝试将textField中输入的位数限制为6.我遇到的问题是,如果我输入小数点后6位数的数字,然后尝试按设备上的退格键删除数字,或者需要在数字内部进行修正,我无法做到。
原因是每当我的代码中出现这一点时,它注意到我已经在十进制之后输入了6位数(这是正确的),因此,我的退格键输入无效。如何在小数位后保留6位数的限制,并允许在达到此限制后编辑数字?
答案 0 :(得分:3)
我没有机会测试这个,但是根据this answer,当输入退格时,字符串应该为空(这是有道理的)。所以你应该能够做到这一点。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
// Always allow a backspace
if ([string isEqualToString:@""]) {
return YES;
}
// Otherwise check lengths
NSString *integerPart = [textField.text componentsSeparatedByString:@"."][0];
NSString *decimalPart = [textField.text componentsSeparatedByString:@"."][1];
if ([integerPart length] > 8 || [decimalPart length] > 5) {
return NO;//this clause is always called.
}
return YES;
}
答案 1 :(得分:0)
//Construct the new string with new input
NSString* newText = [textField.text stringByReplacingCharactersInRange:range
withString:text];
NSString *integerPart = [newText componentsSeparatedByString:@"."][0];
NSString *decimalPart = [newText componentsSeparatedByString:@"."][1];
if ([integerPart length] > 8 || [decimalPart length] > 5) {
return NO;//this clause is always called.
}
我相信这就是你所需要的。这将构造将在文本字段中显示的新字符串,您可以评估该字符串。