【问题标题】:Multiple Hierarchy levels with navigation Controller带有导航控制器的多个层次结构级别
【发布时间】:2009-03-15 00:14:12
【问题描述】:

我正在尝试使多个层次结构正常工作 与导航控制器。我有 3 个层次结构和 我可以在层级中向下移动,但我可以 只回一层不回两层,回到起点 查看。

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

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

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

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

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

  4. 或者...?

提前致谢,

吉姆

【问题讨论】:

  • 我真的很想知道如何在 ios5 中使用 segues 实现同样的功能

标签: iphone cocoa-touch uikit


【解决方案1】:

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

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


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 中定义,并且将根据导航的当前状态注入正确的引用。它就像魔术一样工作!

【讨论】:

  • 感谢您的回答。我还是有点困惑。你有 *navCtl 但然后使用 self.navigationController。应该是 self.navCtl 吗?
  • 第一个代码 sn-p 将在应用程序委托中;第二个将在根视图控制器中。
【解决方案2】:

来自 Apple 开发者网站的 DrillDownSave 示例代码:

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

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

吉姆

【讨论】:

【解决方案3】:

一般而言,您的所有层次结构都应包含在单个 UINavigationController 中。我不确定是否支持嵌套它们。

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 您应该将此作为一个单独的问题提出。
    猜你喜欢
    • 1970-01-01
    • 2015-12-22
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    相关资源
    最近更新 更多