UITextField在选中时清除,但如果没有输入则还可以恢复数据

时间:2012-08-28 23:55:49

标签: ios uitextfield

我有一个带UITextFields的表,我希望这样做,以便在选择文本字段时,清除当前信息(以允许新输入),但如果用户决定(选择后)他们不想要改变它,我希望他们能够点击其他地方,之前的数据再次出现在文本域中。

有一种简单的方法吗?

5 个答案:

答案 0 :(得分:7)

使用placeholder属性是一个很好的用户友好的方法。将viewController设置为textfield的委托(如Andeh所述),然后添加以下代码:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    textField.placeholder = textField.text;
    textField.text = @"";
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    if (textField.text.length == 0) {
        textField.text = textField.placeholder;
    }
    textField.placeholder = @"";
}

你已经完成了。如果页面上有多个UITextField,并且您不希望所有这些行为都出现,则可以对上述方法添加检查。

答案 1 :(得分:2)

textFieldDidBeginEditing委托方法中,在清除UITextField之前将当前值保存到持久变量。然后在didFinishEditing委托方法中,如果用户输入的新长度为0,则将文本设置回存储值!

UITextField Delegate docs供参考。

答案 2 :(得分:2)

首先,我认为你在这里有两套行为。

  1. 开始编辑时,文本字段必须清除该值。这存在:-clearsOnBeginEditing
  2. 如果文本为空,则文本字段必须还原以前的文本。子类化似乎是更好的解决方案。
  3. 以下是可能的示例类:

    // MyRestoringTextField.h
    @interface MyRestoringTextField : UITextField
    @end
    
    // MyTextField.m
    @interface MyRestoringTextField ()
    @property (strong, nonatomic) NSString *previousText;
    @end
    
    @implementation MyRestoringTextField
    - (BOOL)becomeFirstResponder
    {
        BOOL result = [super becomeFirstResponder];
        self.previousText = self.text;
        return result;
    }
    - (BOOL)resignFirstResponder
    {
        BOOL result = [super resignFirstResponder];
        if (self.text.length == 0)
            self.text = self.previousText;
        return result;
    }
    @end
    

    希望有所帮助。

答案 3 :(得分:0)

如果您未能输入,要清除然后恢复textField,请使用以下代理:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
   [[NSUserDefaults standardUserDefaults] setObject:textField.text forKey:kTextFieldIdentifier];
    textField.text = @"";
}

-(BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    if ([textField.text isEqualToString:@""])
        textField.text  = [[NSUserDefaults standardUserDefaults]
                    stringForKey:kTextFieldIdentifier];
    return YES;
}

答案 4 :(得分:0)

iOS 8.1起,textFieldDidBeginEditing已收到已清除的文字。你应该使用

-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField

初始化占位符字段。