0

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

视图控制器由 master 发送到将它们放入 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;

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

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

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

4

2 回答 2

1

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

于 2013-01-13T11:53:10.907 回答
0

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

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

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

于 2013-01-14T08:55:35.930 回答