UISplitViewController以编程方式没有nib / xib

我通常创build我的项目没有IB的东西。 我做的第一件事就是去掉所有对xibs的引用,更新plist等的出处,等等。 没有问题,很好(在我的世界)!

现在,我刚刚安装了3.2,并试图开发我的第一个iPad应用程序。 按照之前的相同的程序,我创build了一个基于UISplitView的应用程序项目,并剥离了所有的IB东西。 另外,我跟随了苹果公司参考文档中的章节: 以编程方式创build一个分割视图控制器 ,但是,从不显示主视图,只有细节视图(不pipe是什么方向)。 我真的试图仔细看过这个,但我不明白我错过了什么。

是否有一个UISplitViewController工作的例子,如果没有nibs漂浮在某处? 我GOOGLE了,但找不到任何。 或者你知道我可能错过了什么?

在你的委托标题中声明你的splitviewcontroller,在你的didfinishlaunching中使用类似的东西

确保您将UISplitViewControllerDelegate添加到detailedViewController头文件,并且您也拥有委托方法。 记得要导入相关的头文件

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { splitViewController = [[UISplitViewController alloc] init]; rootViewController *root = [[rootViewController alloc] init]; detailedViewController *detail = [[detailedViewController alloc] init]; UINavigationController *rootNav = [[UINavigationController alloc] initWithRootViewController:root]; UINavigationController *detailNav = [[UINavigationController alloc] initWithRootViewController:detail]; splitViewController.viewControllers = [NSArray arrayWithObjects:rootNav, detailNav, nil]; splitViewController.delegate = detail; [window addSubview:splitViewController.view]; 

编辑 – 根据斯科特下面的出色build议,不要添加到Windows子视图,而是

  [self.window setRootViewController:(UIViewController*)splitViewController]; // that's the ticket [window makeKeyAndVisible]; return YES; } //detailedView delegate methods - (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)pc { [barButtonItem setTitle:@"your title"]; self.navigationItem.leftBarButtonItem = barButtonItem; } - (void)splitViewController:(UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem { self.navigationItem.leftBarButtonItem = nil; } 

我也喜欢代码到IB 😉

老式的线程,但认为当上述技术无法产生UISplitViewController,正确响应设备方向更改事件,我会免费读者时间+悲伤。 你需要:

  1. 确保所有下级视图在shouldAutorotateToInterfaceOrientation中正确响应。 这里没有新东西。
  2. 而不是将UISplitViewController的视图添加到主窗口,

     [window addSubview:splitViewController.view]; // don't do this 

    而是将主窗口的根控制器设置为UISplitViewController:

     [self.window setRootViewController:(UIViewController*)splitViewController]; // that's the ticket 

添加splitviewcontroller的视图作为主窗口的子视图(几乎没有)允许它与兄弟视图共同呈现,但它不会与UISplitViewController的预期用例一起飞。 UISplitViewController是一个汉兰达视图; 只能有一个

我刚刚遇到了同样的问题。 确保你的子视图控制器的splitview可以Autorotate接口方向。

你可以像这样改变你的childViewController中的函数:

 -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } 

那么主视图将显示。