我正在尝试让多层次的层次结构工作 与导航控制器。我有三个级别的层次结构 我可以向下移动层次结构,但我可以 只回到一个级别,而不是两个级别,回到起点 图。
我首先为View#1创建一个导航控制器并推送下一个 查看,查看#2,到它上面。然后我将导航控制器添加到 didSelectRowAtIndexPath中窗口的子视图。点击 在视图#1中的一个表行,将我带到下一个层次结构视图#2。
下一个层次结构视图也是一个表格视图。这是哪里 我认为问题出现了。我创建另一个导航控制器 并在视图中的didSelectRowAtIndexPath中将#3视图推入其中 视图#2的控制器。单击View#2中的表行 我去观看#3。但是当我使用后退按钮返回View#2时 我回到空视图,而不是真正的视图#2。
我只需要一个导航控制器来处理3个等级 hiearchy而不是两个导航控制器?
如果#1为是,那么如何通过导航控制器查看#2 控制器,以便我可以将View#3推到导航控制器上?
或者我是否需要将所有三个视图都推送到导航控制器上 在视图#1?
还是...?
提前致谢,
吉姆
答案 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)都有自己的数组实例作为其数据......