【问题标题】:How to load Separate NIB Files for iPhone 4-inch and iPhone 3.5 inch?如何为 iPhone 4 英寸和 iPhone 3.5 英寸加载单独的 NIB 文件?
【发布时间】:2013-01-03 17:39:10
【问题描述】:

如何为我的 iPhone 应用加载单独的 nib 文件,以检查用户是否拥有 iPhone 5/iPod Touch 4 英寸屏幕和 3.5 英寸屏幕?

这是在init方法中完成的吗?

详情 - 我没有为整个应用程序使用故事板。在某一时刻,我确实使用了故事板并从其中一个视图控制器中调用它。 (有没有办法区分情节提要?)

  • 我正在寻找一种在每个单独的 viewController 中初始化的解决方案...而不是我会放入只运行一次的 appdelegate 的解决方案。

  • 对我来说,自动布局在很多情况下都不起作用。这些设计非常图形化,太多的空白会让事情看起来很糟糕。

【问题讨论】:

    标签: ios layout ios6 nib


    【解决方案1】:

    我找到了方法!

    • 我制作了单独的 nib 文件,一个用于 3.5 英寸/iPhone 非视网膜,一个用于 iPhone5
    • 我使用宏来检查当前手机是否为 iPhone 5 格式。 (1)
    • 对于普通的 initWithNibName:bundle: 我写了一个异常,以便他们不使用普通的初始化程序。我将其命名为@“错误的初始化程序”
    • 我为 viewController 创建了一个新的指定初始化程序,将其命名为 initForFormat:
    • 我使用宏检查设备是否为 iPhone 5。如果是 iphone5,那么我使用 nib 名称 ViewControllerIphone5 进行初始化

    我从 RayOfHope 的https://stackoverflow.com/a/13068238/1492368 得到这个宏

     #define HEIGHT_IPHONE_5 568
    #define IS_IPHONE   ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
    #define IS_IPHONE_5 ([[UIScreen mainScreen] bounds ].size.height == HEIGHT_IPHONE_5 )
    

    所以在新指定的初始化器initForLayout中:我写

    if(IS_IPHONE_5)
        {
            self=[super initWithNibName:@"DetailViewControlleriPhone5" bundle:nil];
        }
        else
        {
            self=[super initWithNibName:@"DetailViewController" bundle:nil];
        }
    

    旧初始化程序

    我从 Big Nerd Ranch 学到了这一点: 使用标准初始化程序时抛出异常

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
    
        @throw [NSException exceptionWithName:@"Wrong initializer"
                                       reason:@"Use initForLayout:"
                                     userInfo:nil];
        return nil;
    }
    

    从另一个 ViewController/AppDelegate 调用 View Controller 所以当我从另一个视图控制器或我写的 appdelegate 调用这个 DetailViewController 时:

    DetailViewController *detailViewController = [[DetailViewController alloc] initForLayout];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      相关资源
      最近更新 更多