首页 > 解决方案 > 带键盘的移动按钮,Swift

问题描述

@objc func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {

        if self.textView.frame.origin.y == 0 {
            let height = keyboardSize.height
            self.textButton.frame.origin.y -= height
            Log.debug("height: \(height)")
        }
    }
}

@objc func keyboardWillHide(notification: NSNotification) {
     if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {

    if self.textButton.frame.origin.y != 0 {
        let height = keyboardSize.height
        self.textButton.frame.origin.y += height
        Log.debug("height: \(height)")
    }
}
}

我用适当的观察者调用了这 2 个函数。问题是在第二次键盘显示后键盘的高度发生了变化。这就是发生的事情=>

这是我设置按钮的地方:

textButton.frame = CGRect(x: textView.frame.width - 95, y: textView.frame.height , width: 70, height: 70)

这是我从 ViewDidLoad() 调用的按钮函数

 @objc func crossButtonTapped(_ sender:UIButton) {
    self.textView.resignFirstResponder()
}

Ps 如果我希望键盘在按钮单击时显示并在第二个按钮单击时隐藏怎么办?

谢谢!

标签: swiftuser-interfaceuiviewcontrollerkeyboarduibutton

解决方案


首先,如果您想添加会粘在键盘上方的按钮,我建议使用“UIToolbar”。

关于你的PS,它非常简单:

@objc func crossButtonTapped(_ sender:UIButton) {
    self.textView.isFirstResponder ? self.textView.resignFirstResponder() : 
    self.textView.becomeFirstResponder() 
}

希望能帮助到你 :)


推荐阅读