用户在iOS中输入值后,无法编辑UITextField

时间:2013-03-29 05:21:31

标签: ios uitextfield uitextfielddelegate

我在iOS中有以下代理方法的实现:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

if (textField.tag == 2){

        if(textField.text.length > 2) {

            return NO;

        }

        return YES;

    }

    else if (textField.tag == 3) {

        if(textField.text.length > 1) {

            return NO;

        }

}

代码对用户进行必要的限制,直到他们可以输入的字符数。但是,文本字段也不允许用户在输入文本后对其进行编辑。它不允许任何击键(包括删除/退格键)。有没有办法纠正这个问题以维持文本长度限制,但是允许用户编辑这个值?

3 个答案:

答案 0 :(得分:1)

你的支票都错了。您不想检查当前文本的长度,您想要检查允许更改时文本的长度。

试试这个:

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

    if (textField.tag == 2) {
        return newText.length <= 2; // only allow 2 or less characters
    } else if (textField.tag == 3) {
        return newText.length <= 1; // only allow 1 or less characters
    } else {
        return YES;
    }
}

答案 1 :(得分:0)

使用下面的代码

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
       NSUInteger newLength = [textField.text length] + [string length] - range.length;
       if (textField.tag == 2)
       {           
            if (newLength>2) {
            //     [textField resignFirstResponder];
                   return NO;
             }
             else {
                   return YES;
             }
        }
        else if (textField.tag == 3)
        {
            if (newLength>1) {
            //     [textField resignFirstResponder];
                   return NO;
             }
             else {
                   return YES;
             }
        }
}

试试这个你会成功的

答案 2 :(得分:0)

我使用userInteractionEnabled UITextField属性启用和禁用编辑功能。不确定你是否在寻找它。

    if () // Editable
    {
        textField.userInteractionEnabled = YES;
    }
    else // Non Editable
    {
        textField.userInteractionEnabled = NO;
    }