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

问题描述:

我正在将iPhone应用程序转换为通用应用程序。iPhone应用程序转换为iPad应用程序显示iPhone xib不是iPad xib

  • 我已经改变了所有的Xcode的设置,并增加了新的主窗口,iPad.xib
  • 我已经迷上所有的接口生成器引用了(如主窗口,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笔尖/ xib文件AppViewController.xib而不是AppViewControlleriPad.xib。欢迎您提出更多信息,但我无法弄清楚如何在运行iPad而不是iPhone /原始xib文件时加载AppViewControlleriPad.xib。

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

我该如何解决这个问题,以便为正确的设备加载正确的xib?

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

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

+0

如果您从头开始创建通用应用程序,则后缀实际上是_iPhone和_iPad。 – 2012-03-07 14:51:52

+1

是的,但通用应用程序模板中的后缀不是“真正的后缀” - 它们仅用于在初始化应用程序委托中的视图控制器时通过名称手动选择正确的资源文件。根据文件https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/LoadingResources/Introduction/Introduction.html“〜ipad”和“〜iphone”后缀对于自动识别是正确的,而不检查是否(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPad) – 2012-03-07 15:42:21

+0

哇,tnx这个信息。我生活在错误的信念中。 +1 – 2012-03-07 15:46:18

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