是否有编制的iPad时得到一组特定的Xcode编译器标志?

我要有条件地编译的iPad VS iPhone / iPod Touch的代码,例如:

#ifdef TARGET_IPAD
   code for iPad
#else
   code for iPhone
#endif

我知道已经有TARGET_OS_IPHONE和TargetConditionals.h TARGET_CPU_ARM但任何事情,很容易和专门针对iPad的?

-Rei

有帮助吗?

解决方案

在正确的API以用于相对于iPhone / iPad的触摸ipad公司的运行时检查是:

BOOL deviceIsPad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad);

在的UIDevice头滤波器还包括一个方便的宏,UI_USER_INTERFACE_IDIOM(),这将是有益的,如果你的部署目标是

#define UI_USER_INTERFACE_IDIOM() ([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)] ? [[UIDevice currentDevice] userInterfaceIdiom] : UIUserInterfaceIdiomPhone)

所以,你可以只说,负:

BOOL deviceIsPad = (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone);

其他提示

代替使用编译时标志的,则应该使用例如运行时检查使用NSClassFromString以查看是否存在一类,因为相同的应用程序可以在两个设备上进行安装。

在两个设备上运行的该应用的可能性

和因为,没有一个内置的编译时检查它是否靶向ipad公司或没有。

目前我没有发现任何可能让你检查,如果你是在iPad上,但我也不能肯定,如果苹果建议运行时检查。下面是苹果的摘录:

  

在除了视图控制器,被iPhone和iPad设备之间共享的任何类需要包括条件编译宏来分离设备特定的代码。虽然你也可以使用运行时检查,以确定是否存在特定的类或方法可用,这样做只会通过添加代码路径,不会遵循一个设备或其他上增加你的可执行文件的大小。让编译器删除此代码有助于保持你的代码更加清晰。

但是,我能找到的有关条件编译宏的更多具体信息的地方。

有关的多个目标共享相同的项目/代码中,我通过编辑C标记为我的iPad的目标做这个。

通过选择作为目标活性的[MYAPP] -iPad目标,挑项目 - >编辑活动目标[MYAPP] -iPad。搜索“C标志”并双击。添加标记为“-D TARGET_IPAD”。现在符号TARGET_IPAD将只限定为您的ipad目标。

当然,这仅在您使用的是iPad和iPhone不同的目标工作。如果您同时运行相同的二进制代码,明明没有什么编译器可以为你做。 (但是,3.2 SDK作为一月底甚至不支持通用应用程式尚未的。)

(被修改;我很困惑约“万能”的术语的应用程序等)

或 - >只是要确定

-(BOOL)isDeviceAniPad
{   
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200
 BOOL deviceIsPad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad);
 return deviceIsPad;
#endif
 return NO;
}

我想这会做

-(BOOL)isDeviceAniPad
{   
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 30200
  return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad);
#endif
  return NO;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top