UITextField被选中时清除,但是如果没有input则恢复数据

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

是否有捷径可寻?

一个很好的方法来做到这一点很好,用户友好的是使用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 ,并且您不希望所有这些行为都可以,则可以在上面的方法中添加一个检查。

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

UITextField委托文档以供参考。

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

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

这是一个可能的示例类:

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

希望有所帮助。

要清除并恢复文本字段(如果您未能进行input),请使用以下代理:

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

iOS 8.1textFieldDidBeginEditing已经接收到一个清除的文本。 你应该使用

 -(BOOL) textFieldShouldBeginEditing:(UITextField *)textField 

初始化占位符字段。