我有一个带UITextFields的表,我希望这样做,以便在选择文本字段时,清除当前信息(以允许新输入),但如果用户决定(选择后)他们不想要改变它,我希望他们能够点击其他地方,之前的数据再次出现在文本域中。
有一种简单的方法吗?
答案 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,则将文本设置回存储值!
答案 2 :(得分:2)
首先,我认为你在这里有两套行为。
-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
希望有所帮助。
答案 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
初始化占位符字段。