UITextFieldDelegate и удаление полной строки - PullRequest
1 голос
/ 29 октября 2011

Когда я удаляю символы из поля UITextField по одному, вызывается метод делегата textField:shouldChangeCharactersInRange:replacementString:.

Когда я набираю полную строку символов в текстовое поле, а затем удерживаю клавишу удаления, iOS сначала вызывает делегата для каждого удаляемого символа. Но в какой-то момент (примерно на половине пути) он просто удаляет все, что осталось. Странно то, что textField:shouldChangeCharactersInRange:replacementString: не вызывается, когда это происходит. Ни один не textFieldShouldClear:.

Как я могу обнаружить это событие? Я хочу обновить интерфейс, когда текстовое поле пусто. И если я опустошу его таким образом, мой код не сможет обнаружить.

1 Ответ

0 голосов
/ 29 октября 2011

Вы можете зарегистрировать объект для наблюдения UITextFieldDidChangeNotification в вашем текстовом поле.

Например:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:self.textField];    
}

тогда

- (void)textFieldDidChange:(NSNotification *)notification
{
    UITextField *aTextField = [notification object];
    if ([aTextField.text length] == 0) {
        aTextField.backgroundColor = [UIColor redColor];
    }
}

если вы установите точку останова на

aTextField.backgroundColor = [UIColor redColor];

Вы увидите, что он вызывается непосредственно перед последним удалением, который устанавливает для свойства текстового поля значение nil.

Вы также можете просто получить доступ к свойству self.textField, но я демонстрирую, как получить доступ к объекту, на который ссылается уведомление. Если вы пропустите последний параметр (object :) в -addObserver: selector: name: object: он вызовет уведомление для всех textFields в экземпляре этого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...