我是一位经验丰富的程序员,但对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的视图控制器,而不仅仅是视图。

希望这可以帮助!

10-08 05:42