3

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

是否有捷径可寻?

4

5 回答 5

7

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

于 2012-08-29T01:17:10.260 回答
2

首先,我认为您在这里有两组行为。

  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

希望有帮助。

于 2012-08-29T03:12:07.037 回答
2

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

UITextField 代表文档供参考。

于 2012-08-28T23:59:48.633 回答
0

如果您无法输入,要清除然后恢复文本字段,请使用以下委托:

-(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;
}
于 2013-11-18T09:01:05.950 回答
0

截至iOS 8.1textFieldDidBeginEditing已经收到了一个明确的文本。你应该使用

-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField

初始化占位符字段。

于 2017-03-14T06:09:44.840 回答