我正在为 UITableView 中的单元格编写不同的附件。
我需要根据行指定它们。
为此,我编写了一个 dataSource NSDictionary 来保存关于标签、imageView 和附件的信息。Label 和 imageView 非常简单,但我的配件遇到了各种各样的障碍。
我的想法是在我的数据源中包含一个返回 UIView 的块。像这样的东西
self.dataSource = @[
@{
@"label" : @"This is the Label",
@"icon" : @"icon_someIconName.png",
@"accessory" : (UIView*) ^ {
// code that returns the accessory for this row would go here
return nil; //
}
},
...
];
在 tableView:cellForRowAtIndexPath:
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// Configure the cell...
NSDictionary *cellDataSource = self.dataSource[indexPath.section][@"fields"][indexPath.row];
cell.textLabel.text = cellDataSource[@"label"];
[cell.imageView setImage:[UIImage imageNamed:cellDataSource[@"icon"]]];
// Accessory setup
UIView* (^accessoryBuilderBlock)(void) = cellDataSource[@"accessory"];
if (accessoryBuilderBlock) {
cell.accessoryView = accessoryBuilderBlock();
}
我的程序此时崩溃了。
有没有更有效的方法来做到这一点?我对 Objective-C 还很陌生,所以我没有完全掌握最佳实践。
我几乎肯定我在 dataSet 中使用块的方式不正确,特别是因为我在某处读过 ARC 下的块在插入集合时必须被复制。谁能指出我这样做的正确方法(如果这是正确的)?
谢谢!