我有一个带有 UITextFields 的表,我想这样做,以便在选择文本字段时清除当前信息(以允许新输入),但是如果用户决定(在选择后)他们不想更改它,我希望他们能够单击其他地方,并且之前的数据重新出现在文本字段中。
是否有捷径可寻?
我有一个带有 UITextFields 的表,我想这样做,以便在选择文本字段时清除当前信息(以允许新输入),但是如果用户决定(在选择后)他们不想更改它,我希望他们能够单击其他地方,并且之前的数据重新出现在文本字段中。
是否有捷径可寻?
一个很好且用户友好的好方法是使用该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 并且您不希望所有这些行为都具有这种行为,则可以在上述方法中添加检查。
首先,我认为您在这里有两组行为。
-clearsOnBeginEditing
.这是一个可能的示例类:
// 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
希望有帮助。
在textFieldDidBeginEditing
委托方法中,在清除 UITextField 之前将当前值保存到持久变量。然后在didFinishEditing
委托方法中,如果用户输入的新长度为 0,则将文本设置回存储的值!
UITextField 代表文档供参考。
如果您无法输入,要清除然后恢复文本字段,请使用以下委托:
-(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.1
,textFieldDidBeginEditing
已经收到了一个明确的文本。你应该使用
-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField
初始化占位符字段。