resignFirstResponder() возвращает true, и текстовое поле теряет фокус, но клавиатура не игнорирует

У меня есть сцена раскадровки, которая имеет только два UITextFieldПервый из них остался нетронутым, только что из библиотеки объектов. Второй имеет выход для делегата, подключенный к ViewControllerкод.

Интерфейс приложения

Подключение второго текстового поля в IB

(Извините, я должен опубликовать изображения таким образом, потому что Stackru не позволяет мне.)

Код действительно прост. Это все из этого.

class ViewController: UIViewController, UITextFieldDelegate {    
    func textFieldDidBeginEditing(textField: UITextField) {
        textField.resignFirstResponder()
    }
}

Единственное, что он делает, - отпускает клавиатуру, когда она собирается подняться.

Первый показывает клавиатуру нормально. Второй не показывает клавиатуру, потому что он немедленно уволен.

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

С помощью print(:)Я подтвердил, что когда я звоню resignFirstResponder во втором текстовом поле это первый респондент, а возвращаемое значение этого вызова trueи после звонка перестает быть первым респондентом.

Но клавиатура все еще там...

Я пытался добавить print(:) в делегате textFieldShouldReturn(:) метод и нажав клавишу возврата после того, как текстовое поле ушло в отставку. В консоли отладки ничего не печаталось.

Я старался disablesAutomaticKeyboardDismissal(), не возвращая ни false ни true производит любую разницу.

редактировать

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

я знаю textFieldShouldBeginEditing(:), но я не могу использовать его по разным причинам, я просто должен закрыть клавиатуру после ее активации.

Редактировать снова

Я старался view.endEditing(true) также. На самом деле я пытался .endEditing(true) на каждом взгляде в сцене. Не работает

1 ответ

Попробуйте что-то вроде этого:

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    view.endEditing(true)
    return true
}

func textFieldDidBeginEditing(textField: UITextField) {
    textField.resignFirstResponder()
    //make here whatever you like

}
Другие вопросы по тегам