选择时的UITextField清楚,但如果没有输入也恢复数据(UITextField clear w

2019-09-21 20:07发布

我有一个表UITextFields,我希望让这个当选择一个文本框,目前的信息被清除(允许新的输入),但如果用户决定(选择之后),他们不希望改变它,我希望他们能够点击其他地方,并从之前的数据在文本框重新出现。

是否有捷径可寻?

Answer 1:

要做到这一点的一个好方法这是很好的和用户友好的是使用placeholder属性。 设置您的viewController作为文本框的委托(由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页面上S和你不希望这种行为为所有这些,你可以添加一个检查,以上述方法。



Answer 2:

textFieldDidBeginEditing委托方法,清除的UITextField之前保存当前值到一个持续可变的。 然后在didFinishEditing委托方法中,如果用户输入的新长度为0组文本返回到存储值!

的UITextField代表文档以供参考。



Answer 3:

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

  1. 当你开始编辑的文本字段必须清除值。 这存在: -clearsOnBeginEditing
  2. 如果文本为空的文本字段必须恢复以前的文本。 子类化似乎是更好的解决方案。

这里是一个可能的示例类:

// 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

希望帮助。



Answer 4:

要清除,然后还原一个文本框,如果你不将条目,请使用以下的代表这样:

-(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;
}


Answer 5:

由于iOS 8.1textFieldDidBeginEditing已经接收清除文本。 您应该使用

-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField

来初始化占位领域。



文章来源: UITextField clear when selected, but also restore data if nothing is input