2010-04-16 2 views
15

У меня есть два текстовых поля: электронная почта и пароль. Следующий код отлично работает, когда поля отображаются на обычном представлении, но когда они находятся на popover, resignFirstResponder не работает (работает startFirstPender). textFieldsShouldReturn был вызван для обоих полей. Любая идея, если я чего-то не хватает? Спасибо!iPad popover textfield - resignFirstResponder не закрывает клавиатуру

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

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

    [theTextField resignFirstResponder]; 
    return NO; 
} 
+3

Звучит как ошибка. Я предлагаю подать отчет на bugreport.apple.com. –

+2

Такая же проблема, когда textFields находятся в модальном представлении с modalPresentationStyle = UIModalPresentationFormSheet –

+0

Я тоже испытываю эту ошибку. –

ответ

1

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

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

1

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

2

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

17

Проверить this вопрос:

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

- (BOOL)disablesAutomaticKeyboardDismissal { 
    return NO; 
} 
+1

Есть один специальный случай. Если ваш контроллер просмотра находится внутри UINavigaitonController, вам необходимо подклассифицировать UINavigationController и переопределить метод там. См. Http://stackoverflow.com/questions/3316700/dismiss-keyboard-on-ipad/14879832#14879832 для получения дополнительной информации. – Quentamia

0

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

В заключение -

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

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

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

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

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

So;

`- (Недействительными) actionNext {

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

}`

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

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

Смежные вопросы