1

我正在尝试让多个层次结构与导航控制器一起使用。我有 3 个层次结构,我可以向下移动层次结构,但我只能返回一个层次而不是两个层次,回到起始视图。

我首先为 View #1 创建一个导航控制器,然后将下一个视图 View #2 推送到它上面。然后我在 didSelectRowAtIndexPath 中将导航控制器添加到窗口的子视图中。单击 View #1 中的表行,将我带到下一个层次结构级别 View #2。

下一个层级视图也是一个表视图。这是我认为问题发生的地方。我创建了另一个导航控制器,并在视图 #2 的视图控制器中的 didSelectRowAtIndexPath 中将视图 #3 推送到它上面。单击视图#2 中的表行将我带到视图#3。但是当我使用后退按钮返回视图#2 时,我会返回一个空视图,而不是真正的视图#2。

  1. 我是否只需要一个导航控制器来处理 3 个层次结构而不是两个导航控制器?

  2. 如果 #1 是,那么我如何将导航控制器传递给查看 #2 的控制器,以便我可以将视图 #3 推送到导航控制器上?

  3. 还是我需要将所有三个视图都推送到视图#1 中的导航控制器上?

  4. 或者...?

提前致谢,

吉姆

4

4 回答 4

4

Apple Developer 站点中的 DrillDownSave 示例代码:

https://developer.apple.com/library/ios/#samplecode/DrillDownSave/

使用导航控制器使用三个层次结构级别的视图完全符合我的要求。感谢您的回答。

吉姆

于 2009-03-16T14:02:54.540 回答
4

UIViewController旨在与UINavigationController. 推送新视图时,aUINavigationController将注入对自身的引用以及UINavigationItem包含有关导航的元数据(后退按钮及其后面的视图标题等...)。

通常,您希望UINavigationController使用“NIB 名称”字段来指定“根视图控制器”(即出现的第一个视图不应该有后退按钮)来初始化您的 Interface Builder。代码中的等价物大致如下所示:


UIViewController *rootController = [[UIViewController alloc] initWithNibName:@"RootController"];
UINavigationController *navCtl = [[UINavigationController alloc] initWithRootController:rootcontroller];

然后,当您需要推送一个新的视图控制器时(可能在您didSelectRowAtIndexPath的 rootController 中的委托方法中)


SecondViewController *secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondViewController"];
[self.navigationController pushViewController:secondViewController];
[secondViewController release];

请注意,您不必创建self.navigationController属性,它已经在其中定义,UIViewController并将根据导航的当前状态注入正确的引用。它像魔术一样工作!

于 2009-03-15T09:10:58.617 回答
1

通常,您的所有层次结构都应包含在单个 UINavigationController 中。我不确定是否甚至支持嵌套它们。

于 2009-03-15T01:16:09.117 回答
0

如果后续视图是同一控制器的附加实例,您将如何执行此操作,那只不过是表视图的真正层次结构......该示例显示了硬编码的视图......但它们基本上做同样的事情。我的 OO 背景说,如果我分配/初始化控制器的新实例,我不应该能够推动它,然后在弹出(后退按钮)时恢复其状态吗?这似乎对我不起作用。控制器(UITableViewController)的每个实例都有自己的数组实例作为其数据......

于 2009-03-23T22:56:08.320 回答