Клавиатура UITextField не будет удалена. Нет, действительно

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

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

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

Любые мысли? Спасибо.

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

Так как переопределение disablesAutomaticKeyboardDismissal не работает на iOS6, мне пришлось подключить каждое текстовое поле "Did End On Exit" к методу, а затем отпустить клавиатуру там, например:

- (IBAction)doneEditing:(id)sender {

[sender endEditing:YES];

}

Ответ 4

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

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

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

Это даже работает на Modal UIViewController s.

Ответ 5

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

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

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

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

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

Ответ 6

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

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

сделано!