代码之家  ›  专栏  ›  技术社区  ›  Justin Meiners

#如果选中(预处理器宏)以区分iPhone和iPad

  •  9
  • Justin Meiners  · 技术社区  · 14 年前

    #if 或者# ifdef

    编辑

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

    5 回复  |  直到 8 年前
        1
  •  8
  •   Tricertops    11 年前

    无法确定你的应用程序是为iPhone还是iPad构建的。 #if 指令在生成期间解析。一旦你的应用被构建并标记为 通用 ,它必须在两个设备上正确运行。在构建过程中,没有人知道它以后将安装在哪里,一个构建可以安装在两个平台上。

    但是,您可能需要执行以下操作之一:

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

      为此,请使用 [[UIDevice currentDevice] model] 并与 iPhone , iPod touch iPad 兼容模式

    2. 检测用户界面习惯用法 在运行时

      当为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) { }
      
        2
  •  25
  •   Lou Franco    14 年前

    在这个博客的评论部分有一些想法

    http://greensopinion.blogspot.com/2010/04/from-iphone-to-ipad-creating-universal.html

    主要使用

    UI_USER_INTERFACE_IDIOM()
    

    例如:

    #ifdef UI_USER_INTERFACE_IDIOM()
      #define IS_IPAD() (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    #else
      #define IS_IPAD() (false)
    #endif
    
        3
  •  9
  •   Community skywinder    7 年前
    NSString *deviceType = [UIDevice currentDevice].model;
    
    if([deviceType isEqualToString:@"iPhone"]) {
        //iPhone
    }
    else if([deviceType isEqualToString:@"iPod touch"]) {
        //iPod Touch
    }
    else {
        //iPad
    }
    

    就我而言,您不能使用#if或#ifdef来执行此操作,但是,它是受支持的,因为Obj-C是C的严格超集。

    相关: Determine device (iPhone, iPod Touch) with iPhone SDK

        4
  •  0
  •   Mani    10 年前

    无法使用预处理器。使全局函数成为

    func IS_IPAD() -> Bool { 
    ( return (UIDevice.respondsToSelector(Selector("userInterfaceIdiom"))) && (UIDevice.currentDevice().userInterfaceIdiom == UIUserInterfaceIdiom.Pad) )}
    
        5
  •  0
  •   rezwits    9 年前

    我对AppleTV 4使用以下代码,因为UIUserInterfaceIomUnspecified似乎不起作用,也找不到任何其他枚举:

    #ifdef TARGET_OS_IOS
    CGSize result = [[UIScreen mainScreen] bounds].size;
        if(result.width == 1920) {
            NSLog(@"tvOS");
        }
    #endif