【发布时间】:2011-07-29 15:21:52
【问题描述】:
我的根视图是一个分组的表格视图。当用户选择一行时,我希望能够保留选择的行以提供给详细控制器以加载正确的数据。
所有导航都工作正常,我只是不想创建一个全局变量来保留索引。导航控制器是否有内置方法?
【问题讨论】:
标签: ios uitableview uiviewcontroller uinavigationcontroller
我的根视图是一个分组的表格视图。当用户选择一行时,我希望能够保留选择的行以提供给详细控制器以加载正确的数据。
所有导航都工作正常,我只是不想创建一个全局变量来保留索引。导航控制器是否有内置方法?
【问题讨论】:
标签: ios uitableview uiviewcontroller uinavigationcontroller
您可以在详细视图控制器中设置一个属性,推送提供有关所选行的信息,以便它可以影响详细视图控制器的行为,或者可以访问父视图控制器直接来自详细视图控制器:
@property(nonatomic, readonly) UIViewController *parentViewController
我更喜欢第一个选项 - 您可以编写自定义 init... 方法,以便在创建详细视图控制器时为其提供数据。
没有这样的内置方式,您应该尝试使视图控制器尽可能解耦,以便它们可以重复使用并抵抗应用程序中其他地方的更改。
这是来自View Controller Programming Guide for iOS 的有用引用:
除了管理叶数据的视图控制器外,每个自定义视图控制器都必须为用户提供一种导航到数据层次结构的下一级的方法。显示项目列表的视图控制器可以使用给定表格单元格中的点击来显示下一级数据。例如,当用户从顶级列表中选择相册时,Photos 应用程序会创建一个新的相册视图控制器。新的视图控制器已使用有关相册的足够信息进行初始化,以显示相关照片。
【讨论】:
我想跟进我最终是如何编写此代码的。我对 Obj-C 还有些陌生,所以有些概念我还没有处理或遇到过,所以如果这是老帽子,对不起。
您可以在子控制器中创建数据元素,并通过访问其属性将数据 1 对 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;
这显然是非常精简的,但这个想法很有效。只需在调用之前获取您的数据并将其传递给属性,一旦出现子视图,它就会在那里。希望这会有所帮助。
【讨论】: