我使用下面的几行代码来获取键盘在屏幕上显示时的框架。我已经注册到UIKeyboardDidShowNotification
通知。
func keyboardWasShown(notification: NSNotification) {
var info = notification.userInfo
var keyboardFrame: CGRect = info.objectForKey(UIKeyboardFrameEndUserInfoKey).CGRectValue()
}
这曾经在 beta 5 中工作。我下载了最新的 Xcode 6 版本,即 beta 6,这个错误发生在第二行。
'[NSObject:任何对象]?'没有名为“objectForKey”的成员
经过一番谷歌搜索后,我发现this https://stackoverflow.com/a/24628441/1077789解决方案。我像这样改变了它,
var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as NSValue).CGRectValue()
但现在看来这也已经过时了。因为我现在收到这个错误。
'[NSObject:任何对象]?'没有名为“下标”的成员
我无法弄清楚这个错误或如何解决它。
正如 Xcode 6 beta 6 发行说明中提到的,大量 Foundation API 已经过可选一致性审核。
这些变化取代了T!
与任一T?
or T
分别取决于该值是否可以为空(或不是)。
notification.userInfo
现在是一个optional字典:
class NSNotification : NSObject, NSCopying, NSCoding {
// ...
var userInfo: [NSObject : AnyObject]? { get }
// ...
}
所以你必须打开它。如果你know that userInfo
is not nil
然后
您可以简单地使用“强制展开”:
var info = notification.userInfo!
但请注意,如果出现以下情况,这将在运行时崩溃userInfo
is nil
.
否则最好使用可选分配:
if let info = notification.userInfo {
var keyboardFrame: CGRect = (info[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue()
} else {
// no userInfo dictionary present
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)