基于上一视图的UITableView数据

时间:2011-03-04 22:23:50

标签: iphone uinavigationcontroller views tableview grouped-table

我正在处理我的iPhone应用程序的设置部分,我刚认识到如果设置中的每个页面都有自己的视图和.h + .m,那将是很多不必要的代码和观点。所以我得出的结论是,我只会根据用户选择的表视图中的行只改变一种类型的细节视图。但是......我有点挣扎。

设置:

  • 对于主设置视图,我希望它是一个包含多个组和行的分组表视图。
  • 对于设置详细信息视图,我还希望它是一个具有多个组和行的分组表视图(这是令人困惑的地方)。

我看到图像和标签等简单的东西取决于前一个视图,但不是分组的表视图结构。是否有可能在没有大量观点或“如果”陈述的情况下完成我想要的内容?任何形式的帮助都是相关的。

2 个答案:

答案 0 :(得分:1)

你必须做两件事(考虑到你有一个设置视图控制器和一个细节视图控制器)......

首先,当用户在设置视图控制器中选择一行时,您必须在详细视图控制器中设置您要编辑的设置。那是......

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   [self.detailViewCtrl setSetting:[self.settings objectAtIndex:indexPath.row]];
   [self.navigationController pushViewController:self.detailViewCtrl];
}

在详细视图中,您必须修改以下方法来渲染表格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  // ... do something with the self.setting
}

你不能忘记重新加载表格:

- (void)setSetting:(id)newSetting {
  if (setting != newSetting) {
    [setting release];
    setting = [newSetting retain];
    [self.tableView reloadData];
  }
}

这假设如下:

  • 您的第一个视图已将'detailViewCtrl'属性实例化
  • 您的第一个视图有一个名为'settings'的设置属性的NSArray
  • 您的详细信息视图具有“设置”属性
  • 您的详细视图控制器知道如何处理其“设置”属性

答案 1 :(得分:1)

是的,这当然是可能的。 Apple基本上使用Settings bundle及其配置通过plist文件执行此操作。

您要编写的是一个通用的表视图控制器,它从外部源加载其配置和内容(一个或多个plist文件是一个非常好的选择)。这并不是很难做到,至少只要你的表视图执行的动作(例如当用户点击一个单元格时)定义良好且易于在配置文件中编码。例如:“使用此配置打开新页面”或“在此键下将此值保存到用户默认值”等操作很容易设置,例如“让用户用相机拍照,然后让它们裁剪”它自己喜欢并将其上传到Twitter“更难。