我有一个表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和你不希望这种行为为所有这些,你可以添加一个检查,以上述方法。
在textFieldDidBeginEditing
委托方法,清除的UITextField之前保存当前值到一个持续可变的。 然后在didFinishEditing
委托方法中,如果用户输入的新长度为0组文本返回到存储值!
的UITextField代表文档以供参考。
首先,我认为你有两套这里的行为。
-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
希望帮助。
要清除,然后还原一个文本框,如果你不将条目,请使用以下的代表这样:
-(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
来初始化占位领域。