Я не уверен на 100%, чего вы хотите достичь.Этот код откроет клавиатуру при нажатии кнопки и покажет textField только тогда, когда пользователь начинает печатать.
Когда кнопка нажата, мы устанавливаем для ответчика скрытого textField значение true.Таким образом, мы поднимаем клавиатуру, не показывая textField.Когда пользователь начинает печатать, мы раскрываем текстовое поле и изменяем его ограничения, чтобы они были над клавиатурой.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var textFieldBottomConstraint: NSLayoutConstraint!
var keyboardHeight: CGFloat = 0
override func viewDidLoad() {
super.viewDidLoad()
button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
textField.isHidden = true
textField.delegate = self
NotificationCenter.default.addObserver(
self,
selector: #selector(keyboardWillShow),
name: UIResponder.keyboardWillShowNotification,
object: nil
)
}
@objc func buttonPressed() {
textField.becomeFirstResponder()
}
@objc func keyboardWillShow(_ notification: Notification) {
if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
let keyboardHeight = keyboardFrame.cgRectValue.height
self.keyboardHeight = keyboardHeight
}
}
}
extension ViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
textField.isHidden = false
textFieldBottomConstraint.constant = keyboardHeight
return true
}
}