NSNotfication.addObserver - 更新当前的Swift语法?

时间:2017-07-24 15:54:44

标签: ios swift xcode parse-platform

目前,在教程之后,一些语法已经过时。基本上代码应该显示和隐藏用户键盘。我使用addObserver方法得到了一些语法错误,而Swift希望我使用密钥路径,但是,如果我使用auto'fix-it',我会得到更多错误。任何人都可以帮我解决这个问题吗?谢谢!

NSNotification.addObserver(self, selector: #selector(keyboardwillShow), name: .UIKeyboardWillShow, nil)       
NSNotification.addObserver(self, selector: #selector(keyboardwillHide), name: .UIKeyboardWillHide, nil)


func keyboardwillShow(_notification:NSNotification) {    
    keyboard = (_notification.userInfo![UIKeyboardFrameEndUserInfoKey]! as AnyObject).cgRectValue
    UIView.animate(withDuration: 0.4) { 
        self.scrolledView.frame.size.height = self.scrollViewHeight - self.keyboard.height
    }
}

func keyboardwillHide(_notification:NSNotification) {
    UIView.animate(withDuration: 0.5) { 
        self.scrolledView.frame.size.height = self.view.frame.height
    }
}

我收到调试消息:"Incorrect argument labels in call(have _selector:name, expected _forKeyPath:options:context"

1 个答案:

答案 0 :(得分:1)

你的函数有参数,当你在观察者

中添加它时,它就会丢失

您必须使用NotificationCenter.default.addObserver而不是NotificationCenter.addObserver

let selectorForKeyBoardWillShow: Selector = #selector(ViewController.keyboardWillShow(_:))
let selectorForKeyBoardWillHide: Selector = #selector(ViewController.keyboardWillHide(_:))

    // MARK: - Functions
override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: selectorForKeyBoardWillShow, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: selectorForKeyBoardWillHide, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}


// MARK: Keyboard Observer
func keyboardWillShow(_ notification: Notification) {
}

func keyboardWillHide(_ notification: Notification) {
}