带导航控制器的多个层次结构级别

时间:2009-03-15 00:14:12

标签: iphone cocoa-touch uikit

我正在尝试让多层次的层次结构工作 与导航控制器。我有三个级别的层次结构 我可以向下移动层次结构,但我可以 只回到一个级别,而不是两个级别,回到起点 图。

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

下一个层次结构视图也是一个表格视图。这是哪里 我认为问题出现了。我创建另一个导航控制器 并在视图中的didSelectRowAtIndexPath中将#3视图推入其中 视图#2的控制器。单击View#2中的表行 我去观看#3。但是当我使用后退按钮返回View#2时 我回到空视图,而不是真正的视图#2。

  1. 我只需要一个导航控制器来处理3个等级 hiearchy而不是两个导航控制器?

  2. 如果#1为是,那么如何通过导航控制器查看#2 控制器,以便我可以将View#3推到导航控制器上?

  3. 或者我是否需要将所有三个视图都推送到导航控制器上 在视图#1?

  4. 还是...?

  5. 提前致谢,

    吉姆

4 个答案:

答案 0 :(得分:4)

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

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


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

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


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

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

答案 1 :(得分:4)

Apple Developer网站上的DrillDownSave示例代码:

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

正是我正在寻找的三个层次结构级别 使用导航控制器的视图。谢谢你的回答。

吉姆

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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