2010-10-06 3 views
0

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

Однако, когда я устанавливаю текст в нуль, событие 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

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

1

сделать

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

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

0

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

@interface MyClass :() { 
    BOOL clearText; 
} 

и в методе:

- (void)updateText { 
    if (clearText){ 
     clearText = NO; 
     return; 
    } 
    //other code 
    clearText = YES; 
    textfield.text = @""; 
    //other code 
} 
Смежные вопросы