在另一个类中使用NotifcationCenter会导致Swift中无法识别的选择器

问题描述 投票:0回答:1

我想创建另一个类,并设置NotificationCenter以在键盘显示时进行查看。我试图给UIViewController作为参数。但是我发现了无法识别的选择器发送到实例的错误。为什么选择器无法识别,我该怎么办?

  • ViewController
   class ViewController: UIViewController {

     override func viewDidLoad() {
          bringFunc.upWithKeyboard(VC: self)
       }
   }
  • CustomClass
    class bringFunc {

        static  var view: UIView!
        static func upWithKeyboard(VC: UIViewController) {

            view = VC.view
            NotificationCenter.default.addObserver(VC, selector: #selector(keyboardWillShow), name:UIResponder.keyboardWillShowNotification, object: nil)

             NotificationCenter.default.addObserver(VC, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)

        }

        @objc func keyboardWillShow(notification: NSNotification){

            guard let rect = (notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey]as? NSValue)?.cgRectValue, let duration = notification.userInfo![UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval else{return}

            UIView.animate(withDuration: duration) {
             let transform = CGAffineTransform(translationX: 0, y: -(rect.size.height/1.5))
                bringFunc.view.transform = transform

            }

         }

        @objc func keyboardWillHide(notification: NSNotification){
            guard let duration = notification.userInfo![UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval else{return}

            UIView.animate(withDuration: duration) {
                let transform = CGAffineTransform(translationX: 0, y: 0)
                bringFunc.view.transform = transform

            }
        }
    }

谢谢。

ios swift
1个回答
0
投票
class bringFunc { static var view: UIView! class func upWithKeyboard(VC: UIViewController) { view = VC.view 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 class func keyboardWillShow(notification: NSNotification){ guard let rect = (notification.userInfo![UIResponder.keyboardFrameEndUserInfoKey]as? NSValue)?.cgRectValue, let duration = notification.userInfo![UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval else{return} UIView.animate(withDuration: duration) { let transform = CGAffineTransform(translationX: 0, y: -(rect.size.height/1.5)) bringFunc.view.transform = transform } } @objc class func keyboardWillHide(notification: NSNotification){ guard let duration = notification.userInfo![UIResponder.keyboardAnimationDurationUserInfoKey] as? TimeInterval else{return} UIView.animate(withDuration: duration) { let transform = CGAffineTransform(translationX: 0, y: 0) bringFunc.view.transform = transform } } }
© www.soinside.com 2019 - 2024. All rights reserved.