web-dev-qa-db-fra.com

Comment écrire des notifications au clavier dans Swift 3

J'essaie de mettre à jour ce code vers Swift 3:

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil)

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil)`

Jusqu'ici, je viens d'essayer les corrections automatiques données par le compilateur. Cela donne un code comme celui-ci:

let notificationCenter = NotificationCenter.default()
notificationCenter.addObserver(self, selector: Selector(("keyboardWillShow:")), name: NSNotification.Name.UIKeyboardWillShow, object: nil)

notificationCenter.addObserver(self, selector: Selector(("keyboardWillHide:")), name: NSNotification.Name.UIKeyboardWillHide, object: nil)`

Malheureusement, cela ne me mène pas loin, ce qui entraîne des erreurs supplémentaires.

Quelqu'un at-il résolu ceci s'il vous plaît? 

S'il vous plaît noter que je suis juste en train d'essayer comment écrire les notifications. Je n'essaie pas (encore) de corriger les fonctions de notification .. Merci

15
David DelMonte

Swift 4

override func viewDidLoad() {
    super.viewDidLoad()   
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}

func keyboardWillShow(notification: NSNotification) {
     print("keyboardWillShow")
}

func keyboardWillHide(notification: NSNotification){
     print("keyboardWillHide")
}

Vous pouvez également obtenir des informations sur le clavier en utilisant le code ci-dessous à l’intérieur de ces méthodes.

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange), name: .UIKeyboardWillChangeFrame, object: nil) .      

@objc func keyboardWillChange(notification: NSNotification) {
     let duration = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! Double
     let curve = notification.userInfo![UIKeyboardAnimationCurveUserInfoKey] as! UInt
     let curFrame = (notification.userInfo![UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
     let targetFrame = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
     let deltaY = targetFrame.Origin.y - curFrame.Origin.y
 }
21
ZAFAR007

J'ai corrigé ce problème en écrivant le code comme ceci

NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
24
Ben Rawner

Swift 4.2 Xcode 10 (10L213o)

Les principaux changements par rapport à Swift 3 sont dans le UIWindow. keyboardWillShowNotification et le UIWindow.keyboardWillShowNotification

let notifier = NotificationCenter.default
notifier.addObserver(self,
                     selector: #selector(KeyboardLayoutConstraint.keyboardWillShowNotification(_:)),
                     name: UIWindow.keyboardWillShowNotification,
                     object: nil)
notifier.addObserver(self,
                     selector: #selector(KeyboardLayoutConstraint.keyboardWillHideNotification(_:)),
                     name: UIWindow.keyboardWillHideNotification,
                     object: nil)


@objc
func keyboardWillShowNotification(_ notification: NSNotification) {}

@objc
func keyboardWillHideNotification(_ notification: NSNotification) {}
20
fssilva

Pour Swift 4.2 .UIKeyboardWillShow est renommé en UIResponder.keyboardWillShowNotification Et .UIKeyboardWillHide est renommé en UIResponder.keyboardWillHideNotification

 NotificationCenter.default.addObserver(self, selector: #selector(NameOfSelector), name: UIResponder.keyboardWillShowNotification , object: nil)
 NotificationCenter.default.addObserver(self, selector: #selector(NameOfSelector), name: UIResponder.keyboardWillHideNotification , object: nil)

   @objc func NameOfSelector() {
       //Actions when notification is received
    }
14

Vous pouvez remplacer le littéral de chaîne obsolète Selector par la paire #selector(Class.method) de type vérifié:

let center = NotificationCenter.default
center.addObserver(self,
                   selector: #selector(keyboardWillShow(_:)),
                   name: .UIKeyboardWillShow,
                   object: nil)

center.addObserver(self,
                   selector: #selector(keyboardWillHide(_:)),
                   name: .UIKeyboardWillHide,
                   object: nil)

La syntaxe #selector est beaucoup plus sûre, car Swift peut vérifier au moment de la compilation que la méthode spécifiée existe réellement.

Pour plus d'informations sur les sélecteurs Swift, voir réponse détaillée de rickster .

13
user4151918

Dans Swift 3.0

 override func viewDidLoad()
    {
        super.viewDidLoad()
 NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
        NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)

}

Afficher et masquer le clavier

func keyboardWillShow(notification: NSNotification) 
{

      // Your Code Here
}

func keyboardWillHide(notification: NSNotification)
{  
   //Your Code Here     
}
3
Rob-4608

Vous pouvez effectuer une notification au clavier sur les deux versions de Swift, respectivement.

Ajouter un serveur d'objet:

NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: .UIKeyboardWillShow, object: nil)

Fonction d'appel Swift 3

func keyboardDidShow() {
          print("keyboardDidShow")
       }

Fonction d'appel dans Swift 4

@objc func keyboardDidShow() {
      print("keyboardDidShow")
   }
1
Tech