web-dev-qa-db-ja.com

Swift 3 NSNotificationCenter Keyboardは表示/非表示

Swift 2で動作するコードがあります。Xcodeを使用してコードを最新バージョンに更新し、2つの問題を除くすべてを修正しました。

私はこのコードを持っています:

let loginvc: LoginVC = self.storyboard?.instantiateViewController(withIdentifier: "LoginVC") as! LoginVC
NotificationCenter.defaultCenter().addObserver(self, selector: #selector(LoginViewController.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object: nil)
NotificationCenter.defaultCenter().addObserver(self, selector: #selector(LoginViewController.keyboardWillHide(_:)), name: UIKeyboardWillHideNotification, object: nil)

これと組み合わせて:

func keyboardWillShow(notification: NSNotification) {

    constraint.constant = -100
    UIView.animate(withDuration: 0.3) {
        self.view.layoutIfNeeded()
    }
}

func keyboardWillHide(notification: NSNotification) {

    constraint.constant = 25
    UIView.animate(withDuration: 0.3) {
        self.view.layoutIfNeeded()
    }
}

最初の部分では、エラーが表示されます

タイプ「LoginViewController」にはメンバー「keyboardWillShow/Hide」がありません

メソッドが下に表示されない理由がわかりません。

誰もがこの問題の解決策を知っていますか?

10
RubberDucky4444

更新された Swift Programming Language book をご覧ください。ページ1027と1028が探しています。次のようになります。

_func keyboardWillHide(_ notification: NSNotification) {…
_

上記の下線が追加されていることに注意してください。また:

_#selector(LoginViewController.keyboardWillHide(_:))
_

また、クラスに@objc(keyboardWillHideWithNotification:)を追加する必要がある場合があります。

9
Lucas

On Swift 4.2、NSNotificationCenterのaddObserver名も変更されました:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(notification:)), name: UIResponder.keyboardDidShowNotification, object: nil)

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(notification:)), name: UIResponder.keyboardDidHideNotification, object: nil)
5
Ricardo Isidro

Swift3で動作するコードを使用します

ViewController(たとえば、loginvc)を使用して通知を追加できます

let loginvc : LoginVC = self.storyboard?.instantiateViewController(withIdentifier: "LoginVC") as! LoginVC

    NotificationCenter.default.addObserver(self,
        selector: #selector(loginvc.keyboardWillShow(notification:)),
        name: NSNotification.Name.UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self,
        selector: #selector(loginvc.keyboardWillHide(notification:)),
        name: NSNotification.Name.UIKeyboardWillHide, object: nil)

次に、キーボードの非表示および表示メソッドを追加します

func keyboardWillShow(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        print("Show") 
    }
}
func keyboardWillHide(notification: NSNotification) {
    if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
        print("Hide")
    }
}
4
Harshad Patel

NSNotificationCenterには、show keyboardを取得するための変更があります。

NotificationCenter.default.addObserver(self, selector: #selector(NovaVisitaVC.abreTeclado(notification:)), name: NSNotification.Name.UIKeyboardWillShow, object: nil)

NotificationCenter.default.addObserver(self, selector: #selector(NovaVisitaVC.abreTeclado(notification:)), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
1
Pablo Ruan