UITextField заменяют текст Поддержкой NSUndoManager

Я просто использую простое

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
nl ja de
Проверьте это stackoverflow.com/questions/150446/… чтобы обнаружить жест встряски и затем осуществить отменяют, показывают себя с этим
добавлено автор iDev, источник

2 ответы

Shake-to-undo
Put this line in your appDelegate's application:didFinishLaunchingWithOptions: method:

    application.applicationSupportsShakeToEdit = YES;

и в соответствующем viewController.m

    -(BOOL)canBecomeFirstResponder {
        return YES;
    }

остальная часть этого кода входит в viewController.m

Property
Put this in the class extension...

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

свяжите его до своего текстового поля в Интерфейсном Строителе.

Undo method
Adds an invocation of itself to the redo stack

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

(мы не должны создавать случай NSUndoManager, мы наследуем один суперклассу UIResponder),

Undo actions
Not required for shake-to-undo, but could be useful...

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

Invocations of the undo method
Here are two different examples of changing the textField's contents…

Example 1
Set the textField's contents from a button action

    - (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 просьба - то же самое в обоих методах

Example 2
Direct keyboard input editing

    #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;
    }
4
добавлено
Я попробовал это, но это didn' t работа. Возможно, it' s, потому что viewController - UITableViewCell? Я добавил код I' ve используется до сих пор. И я также добавлял shaketoedit к appDelegate. Когда я добавляю "canBecomeFirstResponder", он больше не поддерживает встряску, чтобы отменить для клетки.
добавлено автор Hackmodford, источник
У меня есть обычай uitableviewcell установка с пером. Мой код для изменения textfield находится в uitableviewcell' s файл класса. Я пытался установить customcell.m как делегат к textfield. Но это didn' t имеют значение. canbecomefirstresponder никогда не называют, насколько я могу сказать
добавлено автор Hackmodford, источник
Я получил его работающий в tableviewcell диспетчере. Я просто должен был звонить [сам becomefirstresponder]; незадолго до changeing текст в текстовом поле. Теперь это работает. Спасибо!
добавлено автор Hackmodford, источник
Там вы идете;)
добавлено автор Hackmodford, источник
@Hackmodford: "Возможно, it' s, потому что viewController - UITableViewCell?"... это кажется немного... невозможным..., вы имеете в виду, textField находится в клетке табличного представления? Или вы подразумеваете, что у вас есть viewController, который управляет contentView каждого tableViewCell? Или...?
добавлено автор foundry, источник
@Hackmodford, я проверил этот код с textField в UITableViewCell в статическом столе. Это просто работает. Весь код, который не находится в Делегате Приложения, находится в TableViewController . У textField должно быть две связи с TableViewController - (1) , делегатом является TableVC; (2) IBOutlet self.inputTextField (или в вашем случае customTextField ). canBecomeFirstResponder находится в TableViewController и хорошо работает.
добавлено автор foundry, источник
@Hackmodford, that' s большой у вас есть он работающий теперь. Я доверяю you' ll назначить премию...;-j
добавлено автор foundry, источник

Вы ничего не должны делать, это просто работает, если вы не отключаете его. Посмотрите этот вопрос например.

0
добавлено
Я думаю, что OP был после программируемых деталей, но it' s хороший быть напомненным, что это работает из коробки на пользовательские действия также.
добавлено автор Benjohn, источник
Я просто понял, что вы могли бы иметь в виду пользовательское действие, которое изменилось, текст был не обязательно редактировать с клавиатурой, но результатом чего-то программируемого, в этом случае мой ответ немного бесполезен.
добавлено автор JefferyRPrice, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.