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」がありません
メソッドが下に表示されない理由がわかりません。
誰もがこの問題の解決策を知っていますか?
更新された Swift Programming Language book をご覧ください。ページ1027と1028が探しています。次のようになります。
_func keyboardWillHide(_ notification: NSNotification) {…
_
上記の下線が追加されていることに注意してください。また:
_#selector(LoginViewController.keyboardWillHide(_:))
_
また、クラスに@objc(keyboardWillHideWithNotification:)
を追加する必要がある場合があります。
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)
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")
}
}
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)