【问题标题】:Loading the Different Nib Files加载不同的 Nib 文件
【发布时间】:2011-06-08 14:31:28
【问题描述】:

我为 iPhone 和 iPad 创建了两个 nib 文件,所以我的应用程序将是通用的。

我用这个方法来检查是不是iPad:

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

但是当它知道它是哪个时,我不知道如何加载正确的笔尖。

有谁知道加载到 nib 文件的正确方法?

【问题讨论】:

  • 加载一个nib文件究竟是做什么的?笔尖可用于许多事情。这些笔尖是否包含 UIViewController 的视图或其他对象图?您可以使用NSBundleUINib 类或UIViewController-initWithNibNamed:options: 方法加载笔尖。哪个合适取决于笔尖包含的内容以及您使用这些对象的目的。

标签: iphone objective-c ipad nib


【解决方案1】:

实际上,Apple 会自动执行所有这些操作,只需命名您的 NIB 文件即可:

MyViewController~iphone.xib // iPhone
MyViewController~ipad.xib // iPad

并用最少的代码加载您的视图控制器:

[[MyViewController alloc] initWithNibName:nil bundle:nil]; // Apple will take care of everything

【讨论】:

    【解决方案2】:

    你的接口文件应该命名不同,这样这样的东西应该可以工作。

    UIViewController *someViewController = nil;
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        someViewController = [[UIViewController alloc] initWithNibName:@"SomeView_iPad" bundle:nil];
    }
    else
    {
        someViewController = [[UIViewController alloc] initWithNibName:@"SomeView" bundle:nil];
    }
    

    【讨论】:

      【解决方案3】:

      您应该使用初始化程序-[UIViewController initWithNibNamed:bundle:];。 在您的 SomeViewController.m 中:

      - (id)init {
          if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
              if (nil != (self = [super initWithNibName:@"SomeViewControllerIPad"])) {
                  [self setup];
              }
          } else {
              if (nil != (self = [super initWithNibName:@"SomeViewControllerIPhone"])) {
                  [self setup];
              }
          }
          return self;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多