iPhone应用程序转换为iPad应用程序显示iPhone xib而不是iPad xib

时间:2012-03-07 10:09:48

标签: ios cocoa-touch uiviewcontroller xib uiapplicationdelegate

我正在将iPhone应用转换为通用应用。

  • 我更改了所有xCode设置并添加了新的MainWindow-iPad.xib
  • 我已将所有界面构建器引用挂起(例如MainWindow-iPad到相应的iPad类viewController,窗口等)
  • 我为开场视图控制器添加了一个新的iPad类,并在我的AppDelegate.h文件中声明它,并在我的AppDelegate.m文件中合成它们:

      

    UIWindow *窗口;   UIWindow * windowiPad;   AppViewController * viewController;   AppViewControlleriPad * viewControlleriPad;

  • 应用程序委托中的
  • 我检查我正在运行的设备并加载相应的类:

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {      
    // Override point for customization after application launch.
    navController = [[UINavigationController alloc] initWithRootViewController:viewControlleriPad];
    // Add the view controller's view to the window and display.
    [windowiPad addSubview:navController.view];
    [windowiPad makeKeyAndVisible];
    
    [navController setNavigationBarHidden:YES animated:NO];
    
    
    } else {
    //I am an iPhone! 
    
    // Override point for customization after application launch.
    navController = [[UINavigationController alloc] initWithRootViewController:viewController];
    // Add the view controller's view to the window and display.
    [window addSubview:navController.view];
    [window makeKeyAndVisible];
    
    [navController setNavigationBarHidden:YES animated:NO];
    }
    

一切似乎都运行良好 - 除了它仍然加载iPhone nib / xib文件AppViewController.xib而不是AppViewControlleriPad.xib。欢迎您询问更多信息,但我无法弄清楚如何在运行iPad而不是iPhone /原始xib文件时加载AppViewControlleriPad.xib。

我想,或许是天真的,如果xib文件与视图控制器的类名相同,那么ViewController会将其用作xib。

如何修复它以便为正确的设备加载正确的xib?

2 个答案:

答案 0 :(得分:3)

你有拼写错误 - iPad资源的正确sufix是“~ipad”而不是“-iPad”。使用“~ipad”,您的资源将根据设备自动加载。

您的iPad控制器可能不需要另外的UIWindow。您可以在app起点使用相同的窗口。好的做法是有一个视图控制器(你可以为不同的设备执行一些特殊的东西)和两个笔尖(一个“普通”,第二个用“~ipad”sufix)。在极少数情况下,如果整个控制器行为完全不同,您可能需要使用两个视图控制器。

答案 1 :(得分:0)

这可能是由于您没有将iPad的视图控制器连接到IB中的文件所有者。