无法使用退格键从iOS中的文本字段中删除字符

时间:2014-07-18 19:10:18

标签: ios objective-c uitextfield uitextfielddelegate

我正在为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位数的限制,并允许在达到此限制后编辑数字?

2 个答案:

答案 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.
     }

我相信这就是你所需要的。这将构造将在文本字段中显示的新字符串,您可以评估该字符串。