当键盘显示时,我的UIButton在向上移动时没有触发按钮动作

问题描述 投票:2回答:2
override func viewDidLoad() {
    super.viewDidLoad()
    self.submitBtn.translatesAutoresizingMaskIntoConstraints = true

    emailTf.text = emailID

    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
    // Do any additional setup after loading the view.
    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self,action: #selector(PMSignupViewController.dismissKeyboard))
    tap.cancelsTouchesInView = false
    self.view.addGestureRecognizer(tap)
    // Do any additional setup after loading the view.
}

@objc func dismissKeyboard()
{
    view.endEditing(true)

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
@objc func keyboardWillShow(notification: NSNotification) {
    print("keyboardWillShow")
    let userInfo:NSDictionary = notification.userInfo! as NSDictionary
    let keyboardFrame:NSValue = userInfo.value(forKey: UIKeyboardFrameEndUserInfoKey) as! NSValue
    let keyboardRectangle = keyboardFrame.cgRectValue
    let keyboardHeight = keyboardRectangle.height
    self.moveButton(submitBtn, moveDistance: Int(-keyboardHeight), up: true)
}

@objc func keyboardWillHide(notification: NSNotification){
    print("keyboardWillHide")
    let userInfo:NSDictionary = notification.userInfo! as NSDictionary
    let keyboardFrame:NSValue = userInfo.value(forKey: UIKeyboardFrameEndUserInfoKey) as! NSValue
    let keyboardRectangle = keyboardFrame.cgRectValue
    let keyboardHeight = keyboardRectangle.height
    self.moveButton(submitBtn, moveDistance: Int(-keyboardHeight), up: false)

}
func moveButton(_ button: UIButton, moveDistance: Int, up: Bool) {
    let moveDuration = 0.3
    let movement: CGFloat = CGFloat(up ? moveDistance : -moveDistance)

    UIView.beginAnimations("animateTextField", context: nil)
    UIView.setAnimationBeginsFromCurrentState(true)
    UIView.setAnimationDuration(moveDuration)
    self.submitBtn.frame = self.submitBtn.frame.offsetBy(dx: 0, dy: movement)
    UIView.commitAnimations()
}

@IBAction func submitBtnAction(_ sender: Any) {

}



}

所以基本上我有一个顶部有文本字段,底部有一个按钮的视图。当我的键盘启动时,按钮会随之向上移动。但是当按钮位于键盘顶部时,按钮不会触发动作方法。但是当键盘被解除并且它回到屏幕的底部时它工作正常。有什么输入吗?

ios swift
2个回答
1
投票

你最好使用自动布局,因为框架布局会在更改时出现故障,因此,当IBOutlet名称为buttonBotCon时,按钮的底部约束

 @objc func keyboardWillShow(notification: NSNotification) {
        print("keyboardWillShow")
        let userInfo:NSDictionary = notification.userInfo! as NSDictionary
        let keyboardFrame:NSValue = userInfo.value(forKey: UIKeyboardFrameEndUserInfoKey) as! NSValue
        let keyboardRectangle = keyboardFrame.cgRectValue
        let keyboardHeight = keyboardRectangle.height
        self.buttonBotCon.constant = -keyboardHeight
        self.view.layoutIfNeeded()
    }

    @objc func keyboardWillHide(notification: NSNotification){
        print("keyboardWillHide")
       self.buttonBotCon.constant = 0
        self.view.layoutIfNeeded()

    }

编辑:在这里看到演示完成同样的事情buttonUpKeyboard


1
投票

最后我想出了什么导致了这个问题

我只需要在viewdid加载方法中注释掉tap.cancelsTouchesInView = false这一行...并且工作得非常好..但我不知道为什么会这样。

© www.soinside.com 2019 - 2024. All rights reserved.