无法在iOS中显示其他视图

时间:2012-03-15 17:58:53

标签: ios view xib xcode4.3 ios-universal-app

我是iOS开发的UI部分的新手。我正在尝试创建一个通用的iOS应用程序。在Xcode 4.3中,如果使用单视图应用程序模板和通用设备系列创建项目,则会创建以下文件: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的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没有显示。



我在'返回YES'上设置了一个断点。部分,在调试区域中,我可以看到变量 self.window.rootViewController.nibBundle 设置为 nil 。但是,如果使用TestViewController_iPad,变量 self.window.rootViewController.nibBundle 不是



我删除了AlternateViewController和AlternateViewController_iPad.xib。然后我重新创建了它们,但是现在,在“为新文件选择选项:”弹出窗口中,我将Class重置为AlternateViewController,将“Subclass of”重置为UIViewController,并选中“target for iPad”和“With XIB for user”接口。”为这些新文件修改了TestAppDelegate,然后重新运行该应用程序。奇怪的是,现在显示AlternateViewController(iPad),变量 self.window.rootViewController.nibBundle 不是



现在,我在这里失踪了什么?这个bug在哪里?是我的代码还是Xcode 4.3 ???


其他问题:
如果首先显示TestViewController_iPad并且有一个按钮,那么点击它时会显示AlternateViewController_iPad,我究竟是怎么做的呢?


更新的 我已经找到了问题所在。发生的事情是,在没有xib文件的情况下创建ViewController时,方法loadView将添加到新的ViewController中。据我所知,在以编程方式/手动创建视图时使用此方法。使用xib文件或故事板时,必须将其删除。我删除了它,一切正常! :)

1 个答案:

答案 0 :(得分:0)

我已经找到了问题所在。发生的事情是,在没有xib文件的情况下创建ViewController时,方法loadView将添加到新的ViewController中。据我所知,在以编程方式/手动创建视图时使用此方法。使用xib文件或故事板时,必须将其删除。我删除了它,一切正常! :)