Как представить клавиатуру iOS вместе с модальным представлением ViewController?

Я создаю viewController для ввода булавки, очень похожий на тот, который вы видите в iOS, когда заходите в «Настройки» -> «TouchID», и он запрашивает пин-код.

Я пытаюсь имитировать его поведение при представлении клавиатуры iOS вместе с (в то же время) модальным представлением булавки viewController. Я заметил, что другие приложения, такие как Venmo, также могут достичь этого.

Как я могу добиться такого поведения? Мой pinEntryView - это текстовое поле. Я попытался отправить ему сообщение beFirstResponder в viewDidAppear, и это, похоже, работает; однако он представит клавиатуру iOS ПОСЛЕ завершения модального представления viewController. Я хочу, чтобы презентация происходила одновременно, чтобы создать ощущение, что клавиатура iOS фактически встроена/часть ViewController.

Я пробовал отправлять сообщения beFirstResponder в viewWillAppear, viewWillLayoutSubviews, но это нестабильные решения. Иногда клавиатура отображается, а иногда нет. Есть какой-либо способ сделать это?


person AyBayBay    schedule 06.03.2017    source источник


Ответы (2)


Я сделал тест, установив становлениеFirstResponder в viewDidLoad, и он работает нормально. У меня есть одна кнопка, которая вызывает модальное окно, и у этого модального окна есть следующий код:

override func viewDidLoad() {
        super.viewDidLoad()
        self.textField.becomeFirstResponder()
}

У него нет неожиданного поведения.

person Eduardo Antonio Munoz    schedule 06.03.2017
comment
Попробуйте проверить это пару раз, и вы увидите, что клавиатура иногда представлена, а иногда нет. Как вы это проверяли? - person AyBayBay; 07.03.2017
comment
Я надеюсь, это поможет вам. Кстати, я тестирую на физическом устройстве, а не в симуляторе. ссылка - person Eduardo Antonio Munoz; 07.03.2017
comment
Вы можете постоянно видеть клавиатуру в том виде, в котором она представлена? - person AyBayBay; 07.03.2017
comment
Да, я. Я вижу то же поведение, что и приложение Venmo, когда вы нажимаете кнопку «Оплатить» или «Запрос», и оно отображает модальное представление, которое сразу же открывает клавиатуру. - person Eduardo Antonio Munoz; 07.03.2017

Я считаю, что у меня была эта проблема раньше, и у нее есть довольно интересное решение. То, что вы хотите сделать, это позвонить becomeFirstResponder в viewWillAppear перед вызовом super ????.

override func viewWillAppear(animated: Bool) {
    textField.becomeFirstResponder()
    super.viewWillAppear(animated)
}

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

Надеюсь, это поможет и вам.

person George Green    schedule 08.03.2017