UITableView のセルにさまざまなアクセサリを作成する作業を行っています。
行ごとに指定する必要があります。
この目的のために、ラベル、imageView、およびアクセサリに関する情報を保持する dataSource NSDictionary を作成しました。Label と imageView は非常に簡単ですが、付属品である種の障害にぶつかりました。
私の考えは、UIView を返す dataSource 内にブロックを含めることでした。このようなもの
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 にかなり慣れていないので、ベスト プラクティスを完全には把握していません。
特に、コレクション内に挿入するときにARCブロックの下でコピーする必要があることをどこかで読んだため、dataSetでブロックを使用している方法が正しくないことはほぼ確実です。これを行うための正しい方法(これが正しい場合)を教えてもらえますか?
ありがとう!