Клавиатура UITextField не пропустит. Нет, правда - PullRequest
15 голосов
/ 05 декабря 2011

У меня есть табличное представление на листе модальной формы (iPad), и одна из ячеек содержит UITextField.Мой контроллер представления содержит ссылку на текстовое поле и также является его делегатом.

Когда текстовое поле нажимает Return, я сообщаю ему -resignFirstResponder внутри -textFieldShouldReturn:.В другом случае я хочу принудительно завершить редактирование, поэтому я указываю для всего табличного представления значение -endEditing:YES.После этого я освобождаю свою локальную ссылку на текстовое поле и перезагружаю строку, чтобы заменить ее чем-то другим.

Клавиатура не исчезнет в любом случае.Я не знаю, что случилось, и я не уверен, как отлаживать дальше.У меня никогда не было проблем с липкой клавиатурой при любом другом редактировании текста - отставка firstResponder всегда велась, как и ожидалось.

Есть мысли?Благодаря.

Ответы [ 6 ]

21 голосов
/ 05 декабря 2011

Документы Apple описывают это исключение :

На iPad, если контроллер представления модально представляет свой вид, используя стиль "листа формы", клавиатура, когда-то показанная, не скрыта, пока пользователь нажимает клавишу отклонения или модальный контроллер вида программно уволен. Цель такого поведения - избежать чрезмерная анимация при перемещении пользователя между представлениями, которые в значительной степени, но не полностью, текстовые поля.

Что здесь применимо (лист модальной формы на iPad). По-видимому, в этом случае просто невозможно отклонить клавиатуру. Супер. : \

11 голосов
/ 11 апреля 2013

Реализуйте -disablesAutomaticKeyboardDismissal и верните НЕТ.Он работает на iOS 6 , но вы должны реализовать его в нужном контроллере.Если у вас есть контроллер навигации листа модальной формы с дочерним контроллером, у которого есть текстовые поля, то реализации метода требуется реализация контроллера навигации, а не дочернего.

(См. Также Отключить клавиатуру на IPAD )

1 голос
/ 19 октября 2012

Поскольку переопределение disablesAutomaticKeyboardDismissal не работает на iOS6, мне пришлось подключить событие «Did End On Exit» каждого текстового поля к методу, а затем закрыть клавиатуру там, например:

- (IBAction)doneEditing:(id)sender {

[sender endEditing:YES];

}

0 голосов
/ 26 декабря 2017

В swift просто дайте вашему UITextField делегат и сгенерируйте textFieldShouldReturn (), см., Например, ниже -

class ViewController: UIViewController, UITextFieldDelegate {
    func settingUpTextField() {
        textField.delegate = self;
        return;
    }
    ...
    func textFieldShouldReturn(_ textField: UITextField) -> Bool {
        textField.resignFirstResponder();
        return true;
    }
}

сделано!

0 голосов
/ 07 мая 2016

Я только что нашел уникальную ситуацию, когда это происходит.У меня есть мнение, что при увольнении оставляет клавиатуру вверх на экране.Я проверил все, мои делегаты UITextFields были подключены к моему представлению и т. Д. Попытка вручную закрыть клавиатуру в viewWillDisappear () не сработала бы, либо с помощью resignFirstResponder () в полях, либо с помощью endEditing () в представлении.

Затем я понял, что это был мой код проверки поля в самих методах делегатов.Каждый раз, когда редактирование заканчивалось в поле, я проверяю текст в методе делегата textFieldShouldEndEditing, чтобы убедиться, что текст разумный, очень похожий на этот, и не позволяю им выходить из поля до тех пор, пока он не будет проверен.

  func textFieldShouldEndEditing(textField: UITextField) -> Bool
    {
        if self.validateField(textField) {
           return true
        } else {
          return false
        }
   }

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

Это необычная ситуация, но, надеюсь, это поможет кому-то еще, кто столкнется с ней.

0 голосов
/ 22 апреля 2014

disablesAutomaticKeyboardDismissal отказался работать для меня на iOS 7.

Но ... Мне удалось решить эту проблему, просто отключив поля UITextFields на экране.

Мое решение описано здесь .

Это работает даже на модальном UIViewController s.

...