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
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
}
J'ai corrigé ce problème en écrivant le code comme ceci
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: .UIKeyboardWillShow, object: nil)
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) {}
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
}
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 .
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
}
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")
}