【发布时间】:2021-11-17 22:08:27
【问题描述】:
我在屏幕底部有一个 UIButton,当用户在 UITextView 中键入时,该按钮会连接到键盘(输入附件视图),就像我附加的屏幕截图(紫色箭头标记)一样。现在,一旦关闭键盘,我希望此按钮位于屏幕底部,而不是输入附件视图(检查黄色箭头标记流)。
这是我使用的代码
override func viewDidLoad() {
super.viewDidLoad()
confirmButtonUI()
subscribeToShowKeyboardNotifications()
// Do any additional setup after loading the view.
}
func confirmButtonUI() {
confirmButton.layer.cornerRadius = 20.0
confirmButton.layer.shadowRadius = 1.0
confirmButton.layer.shadowColor = UIColor(displayP3Red: 33/255, green: 68/255, blue: 27/255, alpha: 0.18).cgColor
confirmButton.layer.backgroundColor = UIColor(displayP3Red: 164/255, green: 208/255, blue: 208/255, alpha: 1).cgColor
confirmButton.isEnabled = false
confirmButton.layer.shadowOffset = CGSize(width: 0.0, height: 2.0)
confirmButton.layer.shadowOpacity = 1.0
confirmButton.layer.masksToBounds = false
}
func subscribeToShowKeyboardNotifications() {
NotificationCenter.default.addObserver(self, selector:
#selector(keyboardWillShow(_:)), name:
UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector:
#selector(keyboardWillHide(_:)), name:
UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func keyboardWillShow(_ notification: Notification) {
let userInfo = notification.userInfo
confirmButton.layer.cornerRadius = 0.0
othersTextField.inputAccessoryView = confirmButton
let keyboardSize = userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue
_ = keyboardSize.cgRectValue.height
let animationDuration = userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as! Double
UIView.animate(withDuration: animationDuration) {
self.view.layoutIfNeeded()
}
}
@objc func keyboardWillHide(_ notification: Notification) {
othersTextField.inputAccessoryView = nil
confirmButtonBottomConstrains.constant = 57 //Crash here
let userInfo = notification.userInfo
let animationDuration = userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as! Double
UIView.animate(withDuration: animationDuration) {
self.view.layoutIfNeeded()
}
}
In this method its crashing on this line " confirmButtonBottomConstrains.constant = 57 "
我所做的是,一旦键盘关闭,我将 inputAccessoryView 设为 nil,然后尝试使用底部 nslayout 约束将按钮设置为 57(就像我在 UI 中设置的那样),但这条线因以下消息而崩溃
Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
请帮我解决这个问题
【问题讨论】:
-
错误指出
confirmButtonBottomConstrains为空,这意味着您尚未分配/链接约束。查看是否已将约束链接到情节提要或是否以编程方式完成,查看是否正确设置了约束 -
是的,我做到了,但我认为当我将按钮移动到 textview 的 inputaccessory 视图时,这个约束可能会消失
-
现在可以用了吗?
标签: ios swift keyboard uibutton