2012-03-15 65 views
0

我是iOS开发的UI部分的新手。我正在尝试创建一个通用的iOS应用程序。在Xcode 4.3中,如果使用Single View Application模板和Universal设备系列创建项目,则会创建以下文件: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文件,并将文件的所有者自定义类设置为AlternateViewController,并将出口视图设置为对象下的视图。我想看看我是否能显示AlternateViewController_iPad所以在TestAppDelegate我这样做:无法显示iOS中的其他视图

- (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设置为。但是,如果使用TestViewController_iPad,变量self.window.rootViewController.nibBundle而不是



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



现在,我在这里错过了什么?错误在哪里?它与我的代码或Xcode 4.3?



其他问题:
如果TestViewController_iPad显示第一和有一个按钮那里,点击会显示AlternateViewController_iPad时,我应该如何,究竟该怎么办呢?


UPDATE 我已经想通了这个问题。会发生什么情况是,当没有xib文件的情况下创建ViewController时,方法loadView被添加到新的ViewController中。据我的理解,这个方法用于以编程方式/手动方式创建视图。使用xib文件或故事板时,必须将其删除。我删除它,一切正常! :)

+0

AlternateViewController_iPad.xib不显示..你怎么能证实这一点? – Shubhank 2012-03-15 18:28:23

+0

屏幕全黑。 – yoninja 2012-03-15 18:47:03

+0

您的AlternateViewController_iPad.xib默认情况下可能有黑色视图? – Shubhank 2012-03-15 18:50:42

回答

0

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