【发布时间】:2015-02-03 14:21:24
【问题描述】:
我一直在搜索和阅读,但找不到任何确凿的方法来实现我想要的,并希望在这里找到帮助......
我有一个 UITableView,它允许用户向食谱添加多种口味和百分比。我已经实现了使用自定义 Cell / Nib 添加或删除 Flavour 行的方法,并且效果很好。
我现在面临的问题是如何检索用户为每个添加的行提供的值。
(为清晰而编辑:我的问题不是填充数据,而只是动态读取所有数据,以便我可以保存它)
我确实设法获取了可见行的值(我确实了解 Reuseidentifier 和 Tableview 的工作原理,就内存管理而言,iOS 仅跟踪可见行),而不是隐藏行。
理论上我假设我必须在 'cellForRowAtIndexPath' 之外创建一个单元格数组,以维护所有单元格。但后来我面临另一个概念问题,我的自定义笔尖/单元格没有显示......基本上:
- 如何在不使用 dequeingidentifier 的情况下使用/注册 nib
- 或者一般来说,我如何解决总体问题,以便能够读取每行所有用户输入的值
这是我在 cellForRowAtIndexPath 中使用的代码。如前所述,添加和删除单元格就像一个魅力,这不是问题......
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
RecipeFlavourTableViewCell *cell;
int section = (int)indexPath.section;
if(section==0)
return [super tableView:tableView cellForRowAtIndexPath:indexPath];
if(!cell){
[tableView registerNib:[UINib nibWithNibName:@"RecipeFlavourCell" bundle:nil] forCellReuseIdentifier:@"Cell"];
cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
我见过一些图书馆这样做(例如 XLForm),但不明白(在检查它们的来源时)他们如何遍历值并克服这个出队问题......
非常感谢任何帮助
编辑 2:这里是我用来遍历单元格以保存数据的代码,但如前所述,我只能遍历可见单元格:
- (IBAction)saveRecipe:(id)sender {
NSInteger dynamicRows = [self.tableView numberOfRowsInSection:1];
for (int i=0; i<dynamicRows; i++) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:1];
RecipeFlavourTableViewCell *cell = (RecipeFlavourTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];
NSLog(cell.flavour.text);
}
}
【问题讨论】:
-
将填充到表格中的信息保存在哪里?
-
如下所述,我的问题不是填充,而是读取和保存用户输入的数据
-
当你没有很好地将模型与视图分离时,这是你遇到的典型问题......我认为一个人可以过度使用整个 MVC 架构,但这是一个非常好东西。你真的想要一个用于填充单元格的底层数据模型(最初是空的,是的),以及一个单独的控制器来维护用户输入的当前数据,并在 UI 中挂钩以在新模型时不断更新模型值已输入。
-
@RobP 我终于得出了类似的结论,请看下面我的回答
-
我建议的不同之处在于,您不保留 UITableViewCells 数组。你有一个组件,它的工作是以你自己有用的抽象形式保存一堆配方数据——最初可能是一个 NSArray。您从该数据填充 UITableViewCells,然后编辑单元格返回以更改该数据。那么底层的数据表示就可以直接搬到CoreData而不是NSArray中了,所有UI相关的代码都不用改了。
标签: ios iphone forms uitableview dynamic