В случае, если кто-то еще пытается сделать то же самое, я наконец понял это.
Я попытался переопределить контроллер вида canBecomeFirstResponder
для возврата true
и вызвать self.becomeFirstResponder()
, чтобы вызвать клавиатуру.
Однако, поскольку контроллер представления не является текстовым полем, он не будет позиционировать клавиатуру, как будто это текстовая клавиатура. Это может работать, если ваш пользовательский ввод - UIPickerView, но он не работает для текстовой клавиатуры. Вы должны вызвать becomeFirstResponder()
на UITextField, чтобы система правильно разместила клавиатуру.
Кроме того, когда вы устанавливаете ограничения макета, вы не можете использовать
keyboardView.bottomAnchor.constraint(equalTo: inputView.safeAreaLayoutGuide.bottomAnchor)])
или даже
keyboardView.bottomAnchor.constraint(equalTo: inputView.safeAreaLayoutGuide.bottomAnchor)])
Это прижимает клавиатуру к нижней части и не оставляет достаточно места под ней.
Вот мое решение:
class KeyboardViewController: UIInputViewController {
override func viewDidLoad() {
super.viewDidLoad()
let nib = UINib(nibName: "KeyboardView", bundle: nil)
let keyboardView = nib.instantiate(withOwner: nil).first as! KeyboardView
guard let inputView = self.inputView else { return }
inputView.translatesAutoresizingMaskIntoConstraints = false
inputView.addSubview(keyboardView)
keyboardView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
keyboardView.leftAnchor.constraint(equalTo: inputView.leftAnchor),
keyboardView.topAnchor.constraint(equalTo: inputView.topAnchor),
keyboardView.rightAnchor.constraint(equalTo: inputView.rightAnchor)])
}
}
и для моего контроллера вида я просто делаю:
let keyboardViewController = KeyboardViewController()
override func viewDidLoad() {
super.viewDidLoad()
textField.inputView = self.keyboardViewController.inputView
textField.becomeFirstResponder()
}
Если у вас есть какие-либо предложения или вы знаете, как вызвать клавиатуру без вызова becomeFirstResponder()
в текстовом поле, пожалуйста, сообщите мне.
Надеюсь, это кому-нибудь поможет.