Как показать клавиатуру, когда UIAlertController присутствует в пользовательском представлении и UITextField? Я имею в виду, что я хочу, чтобы клавиатура автоматически отображалась без прикосновения пользователя к UITextField в режиме оповещения.
Мой код, как показано ниже, чтобы сделать предупреждение.
func callAlertConfirmation() {
let vc = UIViewController()
vc.preferredContentSize = CGSize(width: 250, height: 70)
let textBookmark = UITextField(frame: CGRect(x: 10, y: 0, width: 230, height: 40))
textBookmark.placeholder = "Typing folder name"
textBookmark.font = UIFont.systemFont(ofSize: 15)
textBookmark.textColor = UIColor.black
textBookmark.borderStyle = UITextField.BorderStyle.roundedRect
textBookmark.autocorrectionType = UITextAutocorrectionType.no
textBookmark.keyboardType = UIKeyboardType.alphabet
textBookmark.returnKeyType = UIReturnKeyType.done
textBookmark.contentVerticalAlignment = UIControl.ContentVerticalAlignment.center
textBookmark.textAlignment = NSTextAlignment.left
textBookmark.clearButtonMode = .whileEditing
vc.view.addSubview(textBookmark)
let alert = UIAlertController(title: "Create New Folder", message: nil, preferredStyle: .alert)
alert.setValue(vc, forKey: "contentViewController")
let actOKButton = UIAlertAction(title: "OK", style: .default) { (_) -> Void in
// action When User Okay
}
alert.addAction(actOKButton)
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
alert.preferredAction = actOKButton
present(alert, animated: true)
}
И когда я звоню
callAlertConfirmation
Я получаю результат, как на этой картинке:

Но я хочу, чтобы изображение, как показано ниже, когда я звоню
callAlertConfirmation
Но когда я использую
alert.addTextField
Я получаю клавиатуру, автоматически отображаемую при наличии предупреждения.
Заранее спасибо.
Это связано с тем, что контроллер предупреждений не знает о добавленном вами представлении. Попробуйте вызвать textBookmark.becomeFirstResponder(), чтобы получить фокус





Я могу ошибаться, но всякий раз, когда я хочу, чтобы UITextView или UITextField сразу отображали клавиатуру, я делаю:
textBookmark.becomeFirstResponder()
Спасибо, но нужно добавить Solve с DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { textBookmark.becomeFirstResponder() } И поместить этот код после настоящего. Спасибо.
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { textBookmark.becomeFirstResponder() } не является хорошим способом решения этой проблемы. У вас возникла эта проблема, потому что вы пытаетесь сделать textBookmark первым ответчиком, но его суперпредставление (предупреждение) еще не представлено. Чтобы решить эту проблему, вы хотите вызвать метод beFirstResponder() в блоке завершения подарка!
какой
Как уже сказал @C4747N, вам нужно вызвать
.becomeFirstResponder()
Когда
Вы хотите вызвать этот метод при представлении предупреждения:
present(alert, animated: true) {
textBookmark.becomeFirstResponder()
}
То, как вы хотите «читать», это похоже на:
Present the alert and once you're done execute the completion body (make the alert's textField first responder)
uialertcontroller не предназначен для настройки, вы можете использовать uiview для настройки и отображения его как предупреждения.