11

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' がありません

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

この問題の解決策を知っている人はいますか?

4

4 に答える 4

10

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

func keyboardWillHide(_ notification: NSNotification) {…

上記のアンダースコアが追加されていることに注意してください。また:

#selector(LoginViewController.keyboardWillHide(_:))

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

于 2016-06-15T10:06:41.027 に答える
4

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")
    }
}
于 2016-12-01T07:56:02.170 に答える