我构建了面向iOS 3.1.3及更高版本的应用,但我遇到了UIKeyboardBoundsUserInfoKey
的问题。事实证明它在iOS 3.2及更高版本中已被弃用。我所做的是使用以下代码来使用正确的密钥,具体取决于iOS版本:
if ([[[UIDevice currentDevice] systemVersion] compare:@"3.2" options:NSNumericSearch] != NSOrderedAscending)
[[aNotification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];
else [[aNotification.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &keyboardBounds];
这实际上工作正常,但Xcode警告我UIKeyboardBoundsUserInfoKey
已被弃用。如何在不压制任何其他警告的情况下摆脱此警告?
另外,有没有办法简单地检查是否定义了UIKeyboardBoundsUserInfoKey
以避免检查iOS版本?我尝试检查它是NULL
还是nil
,甚至弱连接UIKit,但似乎没有任何效果。
提前致谢
答案 0 :(得分:4)
由于代码中任何地方都存在不推荐使用的常量会引发警告(并打破我们-Werror用户的构建),您可以使用实际的常量值来查找字典。感谢Apple通常(总是?)使用常量名称作为它的值。
至于运行时检查,我认为你更好testing for the new constant:
&UIKeyboardFrameEndUserInfoKey!=nil
所以,这就是我为获取键盘框架而做的事情(基于此other answer):
-(void)didShowKeyboard:(NSNotification *)notification {
CGRect keyboardFrame = CGRectZero;
if (&UIKeyboardFrameEndUserInfoKey!=nil) {
// Constant exists, we're >=3.2
[[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardFrame];
if (UIInterfaceOrientationIsPortrait([[UIDevice currentDevice] orientation])) {
_keyboardHeight = keyboardFrame.size.height;
}
else {
_keyboardHeight = keyboardFrame.size.width;
}
} else {
// Constant has no value. We're <3.2
[[notification.userInfo valueForKey:@"UIKeyboardBoundsUserInfoKey"] getValue: &keyboardFrame];
_keyboardHeight = keyboardFrame.size.height;
}
}
我实际上是在3.0设备和4.0模拟器上测试过它。
答案 1 :(得分:0)