Ответ предоставляется в качестве возможного решения другим с подобной проблемой, но там, где обычные средства правовой защиты не работают.
В итоге -
У меня была похожая проблема ( при определенных условиях ), и я попробовал все - безрезультатно - в мой список возможных решений был включен [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: # любой другой индекс #] не сделал!
Было бы замечательно, если бы кто-нибудь смог дать ясность или объяснение этому - иначе - я надеюсь, что это сэкономит кому-то еще несколько часов работы!