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

标签 ios cocoa-touch uiviewcontroller xib uiapplicationdelegate

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

  • 我已经更改了所有 xCode 设置并添加了一个新的 MainWindow-iPad.xib
  • 我已将所有界面构建器引用 Hook (例如,MainWindow-iPad 到适当的 iPad 类 viewController、窗口等)
  • 我为打开的 View Controller 添加了一个新的 iPad 类,并在我的 AppDelegate.h 文件中声明了它,并在我的 AppDelegate.m 文件中合成了它们:

    UIWindow *window; UIWindow *windowiPad; AppViewController *viewController; AppViewControlleriPad *viewControlleriPad;

  • 在应用委托(delegate)中,我检查正在运行的设备并加载适当的类:

    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 文件与 View Controller 的类同名,那么 ViewController 将使用它作为它的 xib。

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

最佳答案

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

而且您可能不需要为您的 iPad Controller 添加另一个 UIWindow。您可以在应用程序起点使用相同的窗口。好的做法是拥有一个 View Controller (在内部你可以为不同的设备执行一些特殊的事情)和两个 Nib (一个“正常”和第二个带有“~ipad”后缀的)。在极少数情况下,如果整个 Controller 的行为完全不同,您可能希望使用两个 View Controller 。

关于ios - iPhone 应用程序转换为 iPad 应用程序显示 iPhone xib 而不是 iPad xib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9599442/

相关文章:

ios - 通过按钮替换 ViewController,线程 1 : EXC_BAD_INSTRUCTION

ios - SwiftUI TextEditor UI 测试 typeText 方法失败

iphone - 如何用颜色填充形状

ios - Xcode 8 中的 'Vary for Traits' 是什么?

iphone - 如何检测 iPhone 状态栏中的触摸?

ios - 使用 Swift 在 Facebook 登录后加载另一个 ViewController

ios - Metal 的 WebRTC iOS 13 问题

iphone - 在 iPhone 中使用 UTF-8 进行编码和解码

iphone - 在 objective-c 中忽略方法的返回值是否有效?

iphone - 委托(delegate)和协议(protocol)无法正常工作