从rootcontroller到detailcontroller的TableView索引(UINavigationController)

时间:2011-07-29 15:21:53

标签: ios uitableview uiviewcontroller uinavigationcontroller

我的根视图是分组的tableview。当用户选择一行时,我希望能够保留选择哪一行来提供给detailController来加载正确的数据。

所有导航工作正常,我只是不想创建一个全局变量来保留索引。是否有内置的navcontroller方法?

2 个答案:

答案 0 :(得分:1)

您可以在详细视图控制器中设置属性,然后推送,提供有关所选行的信息,以便它可以影响详细视图控制器的行为,或者可以访问父视图控制器直接来自详细视图控制器:

@property(nonatomic, readonly) UIViewController *parentViewController

我更喜欢第一个选项 - 您可以编写自定义init...方法,以便在创建详细视图控制器时为其提供数据。

没有内置方式,您应该尽量使视图控制器解耦,以便它们可以重复使用,并且可以抵抗应用程序中其他位置的更改。

这是来自View Controller Programming Guide for iOS的有用引用:

  

除了管理叶数据的视图控制器之外,每个自定义视图控制器必须为用户提供导航到数据层次结构的下一级别的方法。显示项目列表的视图控制器可以使用给定表格单元格中的点击来显示下一级别的数据。例如,当用户从顶级列表中选择相册时,“照片”应用程序会创建新的相册视图控制器。新视图控制器已初始化,其中包含有关相册的足够信息,以显示相关照片。

答案 1 :(得分:0)

我想跟进我最终编码的方式。我对Obj-C还是有点新鲜,所以我没有处理或遇到过一些概念,所以如果这是旧帽子,抱歉。

您可以在子控制器中创建数据元素,并通过访问其属性将数据1 for 1直接传递给该元素。

ParentController.h

NSDictionary *myData;


ChildController.h

NSDictionary *childData;


// This would get called in the parent controller where appropriate
// but before the child controller is presented
ChildController.childData = myData;

这显然非常简单,但这个想法很有效。在调用之前,只需获取数据并将其传递给属性,一旦显示子视图,它就会存在。希望这会有所帮助。