J'ai un morceau de code qui fonctionnait en Swift 2 et j'ai essayé d'utiliser Xcode pour mettre à jour le code vers la dernière version et j'ai tout résolu sauf deux problèmes.
J'ai ce code:
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)
Cela va de pair avec ceci:
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()
}
}
Sur la première partie, je reçois maintenant une erreur disant
Le type "LoginViewController" n'a aucun membre "keyboardWillShow/Hide"
Je ne comprends pas pourquoi il ne voit pas la méthode en dessous.
Quelqu'un connaît-il une solution à ce problème?
Consultez la mise à jour livre Swift Programming Language . Les pages 1027 et 1028 sont ce que vous recherchez. Cela devrait être quelque chose comme ceci:
func keyboardWillHide(_ notification: NSNotification) {…
Notez le soulignement supplémentaire ci-dessus. Aussi:
#selector(LoginViewController.keyboardWillHide(_:))
Vous devrez peut-être également ajouter @objc(keyboardWillHideWithNotification:)
à votre classe.
Sur Swift 4.2, le nom addObserver pour NSNotificationCenter a également changé:
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)
Utilisez ce code qui fonctionne sur Swift3
Vous pouvez utiliser votre ViewController (par exemple, loginvc
) pour ajouter une notification
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)
Ensuite, ajoutez la méthode de masquage et d'affichage du clavier
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 change les choses pour le clavier get show:
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)