【问题标题】:iOS: How to distinguish between iPhone mode and iPad mode?iOS:如何区分 iPhone 模式和 iPad 模式?
【发布时间】:2014-07-23 19:24:13
【问题描述】:

我正在构建一个通用 iOS 应用程序,并且某些配置变量在 iPhone 模式和 iPad 模式之间具有不同的值。请注意我说的是Mode这个词。

据我所知,用户可以从 AppStore 在 iPad 上安装 iPhone 应用,所以我对以下代码有些困惑:

NSString *deviceType = [UIDevice currentDevice].model;

if([deviceType rangeOfString:@"iPad" options:NSCaseInsensitiveSearch].location != NSNotFound)
{
    fCurrentDeviceIsiPad = YES;
    // ...
}
else // iPhone? iPod? 
{
    fCurrentDeviceIsiPad = NO;
    // ...
}

如果用户在 iPad 上安装并运行 iPhone 版本的应用程序,fCurrentDeviceIsiPad 将为 YES(我在我的 iPad 上调试它的 iPhone 版本测试了结果,当然,我首先将部署设备更改为“iPhone” )。

那么,我的问题是如何在不考虑设备类型的情况下区分应用模式

Someone 发布了一些关于操作系统宏的内容,我已经在我的应用程序中尝试过。

#if TARGET_OS_IPHONE
  // iPhone specific code
  #error A
#elif TARGET_OS_IPAD
  // iPad specific code
  #error B
#else
  // Unknown target
  #error C
#endif

这也没有达到我的目的。我将调试设备切换到iPhone模拟器和iPad模拟器,所有编译错误都命中错误A。我误解了这些宏的含义吗?

还有一个问题,这将是我第一次向 AppStore 提交 iOS,它是一个通用应用程序。对于提交过程,是否是上传 iPhone 版本二进制文件和 iPad 版本二进制文件的独立过程?您可能会明白我的新观点:如果答案是肯定的,我可以使用自定义宏手动构建两个版本。

谢谢!

更新:问题解决了!

代码[UIDevice currentDevice].modelUI_USER_INTERFACE_IDIOM()不一样,前者总是返回真实设备类型,后者是当前运行的应用模式/版本。

【问题讨论】:

  • 宏在编译时被评估。除非您在 Xcode 中为 ipad 和 iphone 设置了两个单独的目标,否则它将无法正常工作。

标签: ios iphone objective-c ipad


【解决方案1】:
BOOL isIpad() {
    return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
}

【讨论】:

  • 好像我发了一个重复的问题,我之前找到了这个代码,但我认为这个功能与比较设备的型号值几乎相同,就像上面的代码一样。无论如何,我已经尝试过了,它有效:当我在 iPad 上运行 iPhone 版本的应用程序时,返回值为 NO。谢谢!
【解决方案2】:

创建一个 NSObject 文件并将其命名为 Common。删除.m,删除Common.h中写的所有代码 在 .pch 文件中导入 Common.h 文件 把这个是Common.h文件 然后您可以在整个应用中使用它。

#define IS_IPHONE (!IS_IPAD)
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-13
    • 2011-10-09
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 2020-04-14
    • 1970-01-01
    相关资源
    最近更新 更多