objective-c – #if检查(预处理器宏)来区分iPhone和iPad

是否有一个构建预处理器宏我可以检查,#if或#ifdef,以确定我的当前 Xcode项目是否正在为iPhone或iPad构建?

编辑

正如几个答案所指出的,通常应用程序是通用的,同一个二进制文件可以在两台设备上运行.这些非常相似的设备之间的条件行为应该在运行时而不是编译时解决.

解决方法

无法确定您的应用程序是为iPhone还是iPad构建的.预处理器#if指令在构建期间得到解决.一旦您的应用程序构建并标记为Universal,它必须在两台设备上正常运行.在建筑没有人知道它将在以后安装,一个构建可以安装在两者上.

但是您可能希望执行以下操作之一:

>在运行时检测设备型号.

为此,请使用[[UIDevice currentDevice] model]并与iPhone,iPod touch或iPad字符串进行比较.即使在iPad兼容模式下运行(仅适用于iPhone的应用程序),这将返回正确的设备.这可以用于使用分析.
>在运行时检测用户界面成语.

当iPhone和iPad提供不同的内容时,这是大家检查的.使用[[UIDevice currentDevice] userInterfaceIdiom]并与UIUserInterfaceIdiomPhone或UIUserInterfaceIdiomPad进行比较.你可能想要这样做一些方便的方法

@implementation UIDevice (UserInterfaceIdiom)

- (BOOL)iPhone {
    return (self.userInterfaceIdiom == UIUserInterfaceIdiomPhone);
}
+ (BOOL)iPhone {
    return [[UIDevice currentDevice] iPhone];
}

- (BOOL)iPad {
    return (self.userInterfaceIdiom == UIUserInterfaceIdiomPad);
}
+ (BOOL)iPad {
    return [[UIDevice currentDevice] iPad];
}

@end

然后你可以使用:

if ([[UIDevice currentDevice] iPhone]) { }
// or
if ([UIDevice iPhone]) { }
// or
if (UIDevice.iPhone) { }

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...