【问题标题】:Is this the proper way to detect an iPad?这是检测 iPad 的正确方法吗?
【发布时间】:2010-12-31 02:39:55
【问题描述】:

我可以使用以下代码来检测我的应用程序是否在 iPad 上运行?我的应用需要在 iOS 3.0 或更高版本上运行。

if([[[UIDevice currentDevice] model] isEqualToString:@"iPad"]){
  //Do iPad stuff.
}

【问题讨论】:

    标签: objective-c ipad ios


    【解决方案1】:

    在 iOS >= 3.2 上使用 UI_USER_INTERFACE_IDIOM() 宏:

    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
       //device is an iPad.
    }
    

    在早期版本的 iOS 上,您可以回退到您的代码,即:

    NSRange ipadRange = [[[UIDevice currentDevice] model] rangeOfString:@"iPad"];
    if(ipadRange.location != NSNotFound) {
      //Do iPad stuff.
    }
    

    这种方法是向前兼容的,如果明年 Apple 发布不同的 iPad,型号名称可能会改变,但“iPad”这个词肯定会在字符串中的某个位置。

    【讨论】:

    • 今天有充分的理由使用 currentDevice 方法,即使对于 5.0+ 的应用程序也是如此:希望在 ipad 上运行仅限 iphone 的应用程序时获得一些特殊行为。 UIUserInterfaceIdiom 在这种情况下声称是电话。
    【解决方案2】:

    不。改为这样做:

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        // ...
    }
    

    【讨论】:

    • 要为 iOS 3.2 和更高版本进行开发,您必须使用定义了 UI_USER_INTERFACE_IDIOM() 的较新 SDK。它是一个宏,在早期的操作系统版本中,它总是返回UIUserInterfaceIdiomPhone。如果您使用的是旧版 SDK,您将无法进行 iPad 特定开发,因为您将无法启用 iPad 定位。
    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 2016-05-10
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多