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
のがあり、それらすべてにこの動作を望まない場合は、上記のメソッドにチェックを追加できます。
デリゲートメソッドで、textFieldDidBeginEditing
UITextFieldをクリアする前に、現在の値を永続変数に保存します。次に、didFinishEditing
デリゲートメソッドで、ユーザー入力の新しい長さが0の場合、テキストを保存された値に戻します。
UITextFieldドキュメントを参照用に委任します。
まず、ここには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
お役に立てば幸いです。
エントリを作成できなかった場合に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;
}
の時点でiOS 8.1
、textFieldDidBeginEditing
はすでにクリアされたテキストを受信しています。あなたは使用する必要があります
-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField
プレースホルダーフィールドを初期化します。