当前位置:  开发笔记 > IOS > 正文

检查运行时是否存在UI_USER_INTERFACE_IDIOM

如何解决《检查运行时是否存在UI_USER_INTERFACE_IDIOM》经验,为你挑选了1个好方法。

我正在开发一款能够在iPad和iPhone上运行的通用应用程序.苹果iPad文档说用来UI_USER_INTERFACE_IDIOM()检查我是在iPad或iPhone上运行,但我们的iPhone是3.1.2并且没有UI_USER_INTERFACE_IDIOM()定义.因此,此代码中断:

//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
  return YES; //are we on an iPad?
 } else {
  return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
 }
}

在Apple的SDK兼容性指南中,他们建议执行以下操作以检查函数是否存在:

//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 if(UI_USER_INTERFACE_IDIOM() != NULL &&
  UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
  return YES; //are we on an iPad?
 } else {
  return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
 }
}

这有效,但会导致编译器警告:"指针与整数之间的比较".在挖掘之后,我发现我可以通过以下转换使编译器警告消失(void *):

//iPhone should not be flipped upside down. iPad can have any
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
 if((void *)UI_USER_INTERFACE_IDIOM() != NULL &&
  UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
  return YES; //are we on an iPad?
 } else {
  return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
 }
}

我的问题是:这里的最后一个代码块是否正常/可接受/标准练习?我找不到其他人做这样的事情快速搜索,这让我想知道我是否错过了一个陷阱或类似的东西.

谢谢.



1> Paul Lynch..:

您需要针对3.2 SDK构建适用于iPad的应用程序.因此它将正确构建,UI_USER_INTERFACE_IDIOM()宏仍然可以工作.如果你想知道如何/为什么,请在文档中查找它 - 它是一个#define,它将被编译器理解并编译成可在3.1(等)上正确运行的代码.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有