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



我想创建另一个类并将通知中心设置为在显示键盘时显示视图。我试图给出UIViewController作为论据。但是我发现了无法识别的选择器发送到实例的错误。为什么选择器无法识别,我该怎么办?

  • 视图控制器
class ViewController: UIViewController {
override func viewDidLoad() {
bringFunc.upWithKeyboard(VC: self)
}
}
  • 自定义类
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
}
}
}

谢谢。

这是固定的变体(无论出于何种原因选择这种设计(

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
}
}
}

最新更新