2017-07-24 4 views
0

Actuellement, après un tutoriel, une partie de la syntaxe est obsolète. Fondamentalement, le code devrait montrer et cacher le clavier de l'utilisateur. Je reçois des erreurs de syntaxe avec la méthode addObserver et Swift veut que j'utilise le chemin de la clé à la place, cependant, si j'utilise le "correctif-automatique", j'ai encore plus d'erreurs. Est-ce que quelqu'un pourrait m'aider avec ceci? Merci!NSNotfication.addObserver - Mise à jour de la syntaxe Swift actuelle?

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 
    } 
} 

je reçois le message de débogage: "Incorrect argument labels in call(have _selector:name, expected _forKeyPath:options:context"

+0

Vous n'ajoutez pas d'observateurs à 'NSNotification', vous devriez les ajouter à' NotificationCenter.default' – dan

+0

Center.default n'est plus disponible dans Swift 3? – Prometheus

+0

Il est toujours disponible – dan

Répondre

1

Votre fonction a l'argument, qui manque lorsque vous ajoutez dans observateur

Et vous devez utiliser NotificationCenter.default.addObserver pas 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) { 
} 
+0

Génial! Je ne sais pas exactement pourquoi, mais j'ai essayé d'utiliser NotificationCenter avant et cela n'a pas fonctionné. En tout cas, merci! – Prometheus