текстовое поле для iPad - resignFirstResponder не закрывает клавиатуру - PullRequest
15 голосов
/ 16 апреля 2010

У меня есть два текстовых поля адрес электронной почты и пароль. Следующий код прекрасно работает, когда поля представлены в обычном представлении, но когда они находятся во всплывающем окне, resignFirstResponder не работает. textFieldsShouldReturn был вызван для обоих полей. Есть идеи, если я что-то упустил? Спасибо!

  - (BOOL)textFieldShouldReturn:(UITextField *)theTextField {

     if (theTextField == email) {
         [password becomeFirstResponder];
         return NO;
     }

     [theTextField resignFirstResponder];
     return NO;
}

Ответы [ 5 ]

17 голосов
/ 30 ноября 2011

Проверьте этот вопрос:

Переопределение disablesAutomaticKeyboardDismissal для возврата NO, как показано ниже, исправило мою проблему. Вы должны поместить этот код в свой контроллер представления, с которого вы запускаете клавиатуру:

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}
2 голосов
/ 17 февраля 2011

Как описано в этого ответа , клавиатура иногда остается на экране, когда представление представлено в стиле UIModalPresentationFormSheet.

1 голос
/ 21 сентября 2010

У меня тоже была эта проблема. Но я решил это, сделав еще один элемент управления, которого нет в поповере, как firstResponder, а позже отказался от него. Но я не знаю, в чем проблема с поповером.

1 голос
/ 13 сентября 2010

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

В обычном представлении само представление желает. Возможно, во всплывающем окне вам нужно что-то сделать со своим классом всплывающих окон (например, переопределить некоторые методы Responder), чтобы это работало.

0 голосов
/ 22 мая 2014

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

В итоге -

У меня была похожая проблема ( при определенных условиях ), и я попробовал все - безрезультатно - в мой список возможных решений был включен [obj's resignFirstResponder], переопределение «disablesAutomaticKeyboardDismissal», на мой взгляд контроллер, [self.view endEditing: ДА]; и куча других вещей.

Пошёл на определение [id] текущего первого респондента, только чтобы обнаружить, что это ноль. Нажатие «Готово» на клавиатуре или использование любого из указанных выше способов ничего не дали - клавиатура осталась - даже после нажатия на другое поле ввода.

Экран, по сути, представлял собой ViewController с UITableView с полем ввода текста в каждой ячейке - всего 7 или 8. Нажатие на любую ячейку приведет к появлению клавиатуры, как и ожидалось, а нажатие отдельной кнопки «Далее» (чтобы скрыть клавиатуру и другие операции) сработало, как и ожидалось. Однако в альбомной ориентации последнее поле было закрыто клавиатурой, требующей прокрутки таблицы для ее обнаружения.

После прокрутки и касания этого последнего поля ввода клавиатура не может быть отклонена - несмотря ни на что. Единственным выходом было прокрутить стол обратно под клавиатуру, а затем нажать кнопку «Далее». Это не имеет смысла.

Почти в момент отказа (и реализации обходного пути), решение, которое работало, состояло в том, чтобы сделать это последнее поле ввода firstResponder (даже если у него уже был мигающий курсор), а затем после этого выполнить resignFirstResponder.

Итак,

`- (void) actionNext {

[[m_arrInputFields objectAtIndex:7] becomeFirstResponder];
[[m_arrInputFields objectAtIndex:7] resignFirstResponder];

} `

исправил проблему - тогда как [m_arrInputFields objectAtIndex: # любой другой индекс #] не сделал!

Было бы замечательно, если бы кто-нибудь смог дать ясность или объяснение этому - иначе - я надеюсь, что это сэкономит кому-то еще несколько часов работы!

...