我是一位经验丰富的程序员,但对iOS / ObjC来说还很陌生。我需要向现有的iPad应用程序中添加功能,但不确定如何操作。
该应用程序具有一个带有几个子组件的视图(我们称它为InfoView),其中一个是表格视图(TableView),其中两个是按钮(ButtonA和ButtonB)(以及与此问题无关的其他内容)。
按下ButtonB时,需要将TableView替换为其他视图(将其称为DetailViewA),并将其放在各种项目上。 (ButtonA将我们带回到TableView-这些按钮的作用类似于伪选项卡按钮)选择DetailViewA中的一项时,DetailViewA需要替换为DetailViewB。当DetailViewB关闭时,detailViewA应该重新出现。
我相信我可以通过在按下ButtonA / 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 ]
实施此功能的最佳方法是什么?
最佳答案
您可以使用child view controllers将导航控制器嵌入视图中。设置导航控制器,并将DetailViewA的控制器作为根视图控制器,然后调用以下代码嵌入导航控制器:
[self addChildViewController:self.detailNavigationController];
self.detailNavigationController.view.frame = frameOfTableView;
[self.view addSubview:self.detailNavigationController.view];
[self.detailNavigationController didMoveToParentViewController:self];
按下按钮时,您将隐藏原始表格视图,并显示导航控制器。然后,导航控制器将处理详细视图之间的“向下钻取”。
请注意,您将需要DetailViewA和DetailViewB的视图控制器,而不仅仅是视图。
希望这可以帮助!