我是一名经验丰富的程序员,但对iOS/ObjC相当陌生。我需要为现有的iPad应用程序添加一个功能,但我不知道该怎么做
该应用程序有一个包含多个子组件的视图(我们称之为InfoView),其中一个子组件是表视图(tableview),两个子组件是按钮(按钮a和按钮B)(以及其他与此问题无关的东西)。
当按下按钮B时,TableView需要被打开了各种项目的其他视图(我们称之为DetailViewA)所取代。(按钮A将我们带回TableView-这些按钮的作用类似于伪选项卡按钮)当DetailViewA中的一个项目被选中时,DetailViewA需要被DetailViewB所取代。当DetailViewB关闭时,detailViewA应重新出现。
我相信我可以通过在按下按钮a/ButtonB时隐藏适当的按钮来在TableView和DetailViewA之间切换,但我不知道如何很好地处理向下钻取DetailViewB并再次备份(最好是使用一些滑动动画)-我想也许我可以用UINavigationController来实现这一点,但经过一些研究,我仍然看不出如何在子视图中嵌入UINavigationController。
一张图片告诉千言万语,下面是我所说的大致草图:
+--------------------------------------------------------------------------+
| InfoView | TopView |
| [ButtonA] [ButtonB] | |
| (show table) (show detail) | |
| ---------------------------------- | |
| | |
| this area contains TableView | |
| | |
| when ButtonB is touched this | other stuff here |
| needs to display DetailViewA | |
| with the ability to drill down | |
| deeper to DetailViewB (and | |
| maybe deeper) | |
或分层:([]表示不确定性/未实现)
TopView
InfoView
ButtonA
| ButtonB
| TableView - Shown when ButtonA pressed
| [ MoreInfoView? ] - Shown when ButtonB pressed
[ DetailViewA ]
| [ DetailViewB ]
实现此功能的最佳方式是什么?
您可以使用子视图控制器在视图中嵌入导航控制器。将导航控制器设置为DetailViewA的控制器作为根视图控制器,然后调用以下代码嵌入导航控制器:
[self addChildViewController:self.detailNavigationController];
self.detailNavigationController.view.frame = frameOfTableView;
[self.view addSubview:self.detailNavigationController.view];
[self.detailNavigationController didMoveToParentViewController:self];
按下按钮时,您将隐藏原始表格视图,并显示导航控制器。然后,导航控制器将处理局部视图之间的"向下钻取"。
请注意,DetailViewA和DetailViewB需要视图控制器,而不仅仅是视图。
希望这能有所帮助!