微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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) { }

原文地址:https://www.jb51.cc/c/113232.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐