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のがあり、それらすべてにこの動作を望まない場合は、上記のメソッドにチェックを追加できます。

于 2012-08-29T01:17:10.260 に答える
2

デリゲートメソッドで、textFieldDidBeginEditingUITextFieldをクリアする前に、現在の値を永続変数に保存します。次に、didFinishEditingデリゲートメソッドで、ユーザー入力の新しい長さが0の場合、テキストを保存された値に戻します。

UITextFieldドキュメントを参照用に委任します。

于 2012-08-28T23:59:48.633 に答える
2

まず、ここには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 に答える
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;
}
于 2013-11-18T09:01:05.950 に答える
0

の時点でiOS 8.1textFieldDidBeginEditingはすでにクリアされたテキストを受信して​​います。あなたは使用する必要があります

-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField

プレースホルダーフィールドを初期化します。

于 2017-03-14T06:09:44.840 に答える