使用ShouldChangeCharactersInRange在“endEdit”之后编辑文本字段

时间:2014-03-26 22:28:46

标签: ios uitextfield

我实现了以下代码来限制我的用户在输入第一个小数点后输入超过2个小数点和位置。用户仍然可以编辑文本字段,只要他们不“离开”或“endEdit”文本字段。但是,一旦他们离开文本域并返回,则文本字段不可编辑。我怎么解决这个问题?

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == self.SalesAmounttext)
{
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    NSString *expression = @"^([0-9]+)?(\\.([0-9]{1,2})?)?$";

    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:nil];
    NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
                                                        options:0
                                                          range:NSMakeRange(0, [newString length])];
    if (numberOfMatches == 0)
        return NO;
}

return YES;
}

2 个答案:

答案 0 :(得分:0)

我所要做的只是添加clearsOnInsertion代码,一切正常!感谢@Wain

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == self.SalesAmounttext)
{

textField.clearsOnInsertion=YES ; // HERE

NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

NSString *expression = @"^([0-9]+)?(\\.([0-9]{1,2})?)?$";

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:expression
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:nil];
NSUInteger numberOfMatches = [regex numberOfMatchesInString:newString
                                                    options:0
                                                      range:NSMakeRange(0, [newString length])];
if (numberOfMatches == 0)
    return NO;
}

return YES;
}

答案 1 :(得分:0)

您的逻辑对用户施加了非常严格的限制,因此不允许任意编辑。从用户的角度来看,这可能会让人感到非常困惑,因此很好的选择是:

  1. 创建文本字段时设置clearsOnInsertion,以便每次编辑都是一个全新的开始
  2. 提醒用户注意无效修改
  3. 允许每次编辑,然后在编辑结束时进行格式化,并提醒用户注意任何问题