Селектор выполняется при попытке установить текст UITextField - PullRequest
0 голосов
/ 06 октября 2010

Я пытаюсь очистить UITextField всякий раз, когда выполняется событие UIControlEventEditingChanged.

Однако, когда я устанавливаю текст в ничто, событие UIControlEventEditingChanged вызывается снова, и этокак он продолжает идти.

Это мой код:

- (void)updateText {
    //other code
    textfield.text = @"";
    //other code
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [textfield addTarget:self action:@selector(updateText) forControlEvents:UIControlEventEditingChanged];
}

Я хотел бы иметь возможность устанавливать текст в текстовом поле без бесконечного зацикливания!

Любая помощь приветствуется.

Ответы [ 3 ]

3 голосов
/ 06 октября 2010

Не уверен, что это лучший способ, но прежде чем выполнять программное обновление текстового поля, вы можете удалить прослушиватель UIControlEventEditingChanged, а затем добавить его снова.

1 голос
/ 06 октября 2010

до

- (void)updateText {
    //other code
    if (![textfield.text isEqualToString:@""]){
       textfield.text = @"";
    }
    //other code
}

это, вероятно, не самое элегантное решение, но оно очень быстрое и, безусловно, будет работать

0 голосов
/ 31 января 2012

Альтернативой отмене регистрации на событие и повторной регистрации является установка BOOL для защиты от этой конкретной рекурсии.

@interface MyClass : () {
    BOOL clearText;
}

и в методе:

- (void)updateText {
    if (clearText){
        clearText = NO;
        return;
    }
    //other code
    clearText = YES;
    textfield.text = @"";
    //other code
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...