我是 iOS 开发的 UI 部分的新手。我正在尝试创建一个通用的 iOS 应用程序。在 Xcode 4.3 中,如果使用 Single View Application 模板和通用设备系列创建项目,则会创建以下文件:AppDelegate、ViewController、ViewController_iPhone.xib 和 ViewController_iPad.xib。这些让我感到困惑,因为在以前版本的 Xcode 中,还创建了 AppDelegate 的两个子类;一个用于 iPhone,另一个用于 iPad。无论如何,例如,我有 TestAppDelegate、TestViewController、TestViewController_iPhone.xib 和 TestViewController_iPad.xib。如果我在 iPad 模拟器上运行应用程序,则会显示 TestViewController_iPad.xib。
然后我添加了 AlternateViewController。之后我创建了 AlternateViewController_iPad.xib。我选择了这个 xib 文件并将 File's Owner Custom Class 设置为 AlternateViewController 并将 Outlet 视图设置为 Objects 下的 View。我想看看我是否可以显示 AlternateViewController_iPad 所以在 TestAppDelegate 我这样做了:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
if(NO){
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.viewController = [[[TestViewController alloc] initWithNibName:@"TestViewController_iPhone" bundle:nil] autorelease];
} else {
self.viewController = [[[TestViewController alloc] initWithNibName:@"TestViewController_iPad" bundle:nil] autorelease];
}
self.window.rootViewController = self.viewController;
}
else{
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
self.alternateScreenController = [[[AlternateViewController alloc] initWithNibName:@"AlternateViewController_iPhone" bundle:nil] autorelease];
} else {
self.alternateScreenController = [[[AlternateViewController alloc] initWithNibName:@"AlternateViewController_iPad" bundle:nil] autorelease];
}
self.window.rootViewController = self.alternateScreenController;
}
[self.window makeKeyAndVisible];
return YES;
}
我运行代码,但不幸的是,没有显示 AlternateViewController_iPad.xib。
我在'return YES;'上设置了一个断点 部分,在调试区域,我可以看到变量self.window.rootViewController.nibBundle设置为nil。但是,如果使用 TestViewController_iPad,则变量self.window.rootViewController.nibBundle不是nil。
我删除了 AlternateViewController 和 AlternateViewController_iPad.xib。然后我重新创建了它们,但现在,在“选择新文件的选项:”弹出窗口中,我将类重置为 AlternateViewController,将“子类”重置为 UIViewController,并选中“针对 iPad”和“使用 XIB 为用户界面。” 为这些新文件修改了 TestAppDelegate,然后重新运行应用程序。奇怪的是,现在显示了 AlternateViewController (iPad),并且变量self.window.rootViewController.nibBundle不是nil。
现在,我在这里缺少什么?错误在哪里?是我的代码还是 Xcode 4.3 ???
附加问题:
如果首先显示 TestViewController_iPad 并且那里有一个按钮,单击该按钮将显示 AlternateViewController_iPad,那么我到底该怎么做?
更新
我已经找到了问题所在。发生的情况是,当在没有 xib 文件的情况下创建 ViewController 时,会在新的 ViewController 中添加方法 loadView。据我了解,此方法用于以编程方式/手动创建视图时。使用 xib 文件或情节提要时,必须将其删除。我删除了它,一切正常!:)