4

私はちょうど単純なものを使用しています

self.customerTextField.text = @"text";

しかし、電話を振ると変更を元に戻すことができる元に戻すサポートがあることを望みます。

私はこれを達成する方法についてちょっと途方に暮れています。私が見つけたすべての例はUITextView.

======================== コードの現在の繰り返し =====================

-(void)getUniqueItemID {

    [self.inventoryLibrarian generateUniqueItemIDwithCompletionBlock:^(NSString *string) {

        [self undoTextFieldEdit:string];
        //self.customTextField.text = string;

    }];

}

- (void)undoTextFieldEdit: (NSString*)string
{
    [self.undoManager registerUndoWithTarget:self
                                    selector:@selector(undoTextFieldEdit:)
                                      object:self.customTextField.text];
    self.customTextField.text = string;
}

-(BOOL)canBecomeFirstResponder {
    return YES;
}
4

2 に答える 2

4


次の行を appDelegate のメソッドapplication:didFinishLaunchingWithOptions:に挿入します。

    application.applicationSupportsShakeToEdit = YES;

および関連する viewController.m で

    -(BOOL)canBecomeFirstResponder {
        return YES;
    }

このコードの残りの部分は、viewController.m に入ります。

プロパティ
これをクラス拡張に入れます...

    @interface myViewController()
    @property (weak, nonatomic) IBOutlet UITextField *inputTextField;
    @end

それを Interface Builder のテキスト フィールドにリンクします。

Undo メソッド
自分自身の呼び出しを REDO スタックに追加します

    - (void)undoTextFieldEdit: (NSString*)string
    {
        [self.undoManager registerUndoWithTarget:self
                                        selector:@selector(undoTextFieldEdit:)
                                          object:self.inputTextField.text];
        self.inputTextField.text = string;
    }

(NSUndoManager インスタンスを作成する必要はありません。UIResponder スーパークラスから継承します)

アクションを元に戻す
シェイクして元に戻すには必要ありませんが、便利な場合があります...

    - (IBAction)undo:(id)sender {
        [self.undoManager undo];
    }
    - (IBAction)redo:(id)sender {
        [self.undoManager redo];
    }

undo メソッドの呼び出し
textField のコンテンツを変更する 2 つの異なる例を以下に示します…</p>

例 1
ボタン アクションから textField のコンテンツを設定する

    - (IBAction)addLabelText:(UIButton*)sender {
        [self.undoManager registerUndoWithTarget:self
                                        selector:@selector(undoTextFieldEdit:)
                                          object:self.inputTextField.text];
        self.inputTextField.text = @"text";
    }

明確さを失うリスクがありますが、これを次のように短縮できます。

    - (IBAction)addLabelText:(UIButton*)sender {
        [self undoTextFieldEdit: @"text"];
    }

undoManager の呼び出しは両方のメソッドで同じであるため

例 2
直接キーボード入力編集

    #pragma mark - textField delegate methods

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    {
        [self.undoManager registerUndoWithTarget:self
                                        selector:@selector(undoTextFieldEdit:)
                                          object:textField.text];
        return YES;
    }

    - (BOOL)textFieldShouldReturn:(UITextField *)textField
    {
        //to dismiss the keyboard
        [textField resignFirstResponder];
        return YES;
    }
于 2013-01-12T16:15:13.933 に答える
0

何もする必要はありません。無効にしない限り機能します。たとえば、この質問を参照してください。

于 2013-01-12T00:50:36.750 に答える