3

我在我的通用应用程序上创建了一个名为“ScreenSelectLevelViewController”的新屏幕,其中包含 .h、.m 和 .xib 文件。但我想创建 2 个单独的 xib 文件,一个用于 iPhone,另一个用于 iPad。所以,我复制了我的 ScreenSelectLevelViewController.xib 并将两个文件重命名为这些新名称:

  • ScreenSelectLevelViewController_iPhone.xib;
  • ScreenSelectLevelViewController_iPad.xib;

在我的代码中,我打开了这样的新视图:

ScreenSelectLevelViewController *newScreen = [[ScreenSelectLevelViewController alloc] initWIthNibName:"@ScreenSelectLevelViewController" bundle:nil];
[self presentModalViewController:newScreen animated:true];

问题是:当我在 iPhone 模拟器上运行时,但是当我在 iPad 模拟器上运行时,应用程序仍然打开这个新屏幕的 iPhone 版本的 xib 文件。有人可以帮助我吗?

4

2 回答 2

7

您可以简单地重命名文件,用波浪号替换下划线:

ScreenSelectLevelViewController~iphone.xib
ScreenSelectLevelViewController~ipad.xib

然后您在帖子中编写的代码将自动为当前设备加载正确的文件。

这在Resource Programming Guide中的“iOS 支持设备特定资源”标题下记录。

于 2012-08-25T17:03:07.213 回答
1

在您的应用委托中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
    } else {
        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

这将告诉您的应用程序在启动时使用哪个 xib,然后打开新视图,您可以采用上面显示的内容并应用它:

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    ScreenSelectLevelViewController *newScreen = [[ScreenSelectLevelViewController alloc]        
    initWIthNibName:"@ ScreenSelectLevelViewController_iPhone.xib" bundle:nil];
    [self presentModalViewController:newScreen animated:true];
}
else{
    //same for iPad
}
于 2012-08-25T16:49:10.080 回答