J'ai utilisé les quelques lignes de code ci-dessous pour obtenir le cadre du clavier lorsqu'il s'affiche à l'écran. Je me suis inscrit à la notification UIKeyboardDidShowNotification
.
func keyboardWasShown(notification: NSNotification) {
var info = notification.userInfo
var keyboardFrame: CGRect = info.objectForKey(UIKeyboardFrameEndUserInfoKey).CGRectValue()
}
Cela fonctionnait auparavant en version bêta 5. J'ai téléchargé la dernière version de Xcode 6 qui est la version bêta 6 et cette erreur s'est produite à la deuxième ligne.
'[NSObject: AnyObject]?' n'a pas de membre nommé 'objectForKey'
Après quelques recherches sur Google, je suis tombé sur la solution this . Et je l'ai changé comme ça,
var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue()
Mais il semble que ce soit aussi dépassé maintenant. Parce que je reçois cette erreur maintenant.
'[NSObject: AnyObject]?' n'a pas de membre nommé 'indice'
Je ne peux pas comprendre cette erreur ni comment la résoudre.
Comme mentionné dans les notes de version Xcode 6 beta 6, un grand nombre d'API Foundation ont été auditées pour la conformité facultative. Ces modifications remplacent T!
soit T?
ou T
selon que la valeur peut être nulle (ou non) respectivement.
notification.userInfo
est maintenant un dictionnaire facultatif:
class NSNotification : NSObject, NSCopying, NSCoding {
// ...
var userInfo: [NSObject : AnyObject]? { get }
// ...
}
vous devez donc le déballer. Si vous savez que userInfo
n'est pas nil
alors vous pouvez simplement utiliser un "déballage forcé":
var info = notification.userInfo!
mais notez que cela plantera au moment de l'exécution si userInfo
est nil
.
Sinon, utilisez mieux une affectation facultative:
if let info = notification.userInfo {
var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
} else {
// no userInfo dictionary present
}