如何使用两个 xib 文件创建一个 Objective-C 类(一个用于 iPhone,另一个用于 iPad)
Posted
技术标签:
【中文标题】如何使用两个 xib 文件创建一个 Objective-C 类(一个用于 iPhone,另一个用于 iPad)【英文标题】:How to create a Objective-C class with two xib files (one for iPhone, another for iPad) 【发布时间】:2012-08-25 16:43:21 【问题描述】:我在我的通用应用程序上创建了一个名为“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 文件。有人可以帮助我吗?
【问题讨论】:
【参考方案1】:您可以简单地重命名文件,将下划线替换为波浪线:
ScreenSelectLevelViewController~iphone.xib
ScreenSelectLevelViewController~ipad.xib
那么您在帖子中编写的代码将自动为当前设备加载正确的文件。
这在Resource Programming Guide 中的“ios 支持设备特定资源”标题下记录。
【讨论】:
【参考方案2】:在您的应用委托中:
- (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
【讨论】:
谢谢身体!!我认为这是一些“自动”,但我在 AppDelegate 上找到了你说的代码,现在我知道如何使用了!谢谢!! @user1624785 如果此答案对您有所帮助,请单击此答案旁边的“复选标记”将其标记为正确!以上是关于如何使用两个 xib 文件创建一个 Objective-C 类(一个用于 iPhone,另一个用于 iPad)的主要内容,如果未能解决你的问题,请参考以下文章
如何检查是不是从 Swift 的 XIB 文件中单击了按钮?
如何在 iOS 中为通用应用程序添加新的两个 XIB 文件?
如何通过同一个 ViewController(在故事板上创建)在两个视图(在 xib 上创建)之间切换?