私のtextFieldがfirstFirstResponderになったときにボタンを移動してそこに保持しようとしています。私のコードは、textFieldの入力を開始するまで機能し、ボタンは元の場所、つまりキーボードの背後に戻ります。スウィフト:キーボードの上にあるボタンを移動して滞在する
のような私のコード:このVCが起動し、これのviewDidLoadでbecomeFirstResponderを割り当てるされたとき、私はすぐにbecomeFirstResponderにTextFieldを希望
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(exchangeButton)
exchangeButton.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 40).isActive = true
exchangeButton.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -40).isActive = true
exchangeButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -10).isActive = true
exchangeButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
subscribeToShowKeyboardNotifications()
amountTextField.becomeFirstResponder()
}
@objc func keyboardDidShow(_ notification: Notification) {
let userInfo = notification.userInfo
let keyboardSize = userInfo?[UIKeyboardFrameEndUserInfoKey] as! NSValue
let keyboardHeight = keyboardSize.cgRectValue.height
self.exchangeButton.frame.origin.y = self.exchangeButton.frame.origin.y - keyboardHeight
}
func subscribeToShowKeyboardNotifications() {
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow(_:)), name: .UIKeyboardDidShow, object: nil)
}
注意。
また、私はUIKeyboardWillShowとviewWillAppearも使用しようとしました。これらのシナリオでは、私のボタンは再配置されません。
マイ参照:this SO post