具有UITabBar行为的UISplitview

时间:2013-01-13 11:40:30

标签: ios uitabbarcontroller uisplitviewcontroller uitabbar uisplitview

我已经从UITabBar转移到我的iPad应用程序上拆分视图。

视图控制器由主设备发送到细节,将它们放入UINavigationController。

// Detail manager called when a cell is selected on the master
UINavigationController *detailNavigationController = [[UINavigationController alloc] initWithRootViewController:_detailViewController];

UIViewController *mainNavigationViewController = [self.splitViewController.viewControllers objectAtIndex:0];
NSArray *viewControllers = [[NSArray alloc] initWithObjects:mainNavigationViewController, detailNavigationController, nil];
self.splitViewController.viewControllers = viewControllers;

现在,每次选择主控单元上的单元格时,详细视图上的导航控制器都从根开始。

相反,我希望标签栏控制器具有相同的行为:当您从一个选项卡移动到另一个选项卡时,将保留每个选项卡的导航堆栈。当您选择两次相同的选项卡时,导航堆栈将弹出到根视图控制器。

如何使用基于拆分视图的应用程序以正确的方式实现此目的?

2 个答案:

答案 0 :(得分:1)

您应该为主表中的每个单元格创建一个导航控制器。点击一个单元格时,可以相应地进行切换。如果点击了所选单元格,则在可见导航控制器上调用popToRootViewController:animated:。当然,您必须继承UISplitViewController以保留对导航控制器的引用。您还必须创建一个MaterTableDelegate来告诉您拆分VC,他应该更改细节方面的navcon。

答案 1 :(得分:0)

从Levi的建议开始,我实施了一个有效的解决方案。 总结一下:

  • 子类UISplitViewController
  • 在其上创建对您需要的每个UINavigationController的公开引用
  • UISplitViewController子类的init内部初始化所有导航控制器及其各自的根UIViewControllers
  • 根据您的主要细节实现,确保每次在主视图中选择一个单元格时,右侧导航控制器(在UISplitviewcontroller子类中声明的所有单元格中)都会显示在详细视图。我在详细信息管理器上设置了NSinteger属性(在主单元格选择上设置),以告诉它在详细视图上显示哪个导航控制器。
  • 如果选择了两次相同的主视图单元格,请将相应的导航控制器弹出到root以模拟相同的UITabBar行为。

希望这会对某人有所帮助。