私は、ユーザーがたとえば10色(製品によって異なります)から選択できる色選択テーブルビューを実装しています。ユーザーは他のオプション(ハードドライブ容量など)を選択することもできます。
すべての色オプションは、独自のテーブルビューセクション内にあります。
実際の色を示すtextLabelの左側に小さな正方形を表示したいと思います。
今、私は単純な正方形のUIViewを追加し、それに次のような正しい背景色を与えます:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:RMProductAttributesCellID];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:RMProductAttributesCellID] autorelease];
cell.indentationWidth = 44 - 8;
UIView *colorThumb = [[[UIView alloc] initWithFrame:CGRectMake(8, 8, 28, 28)] autorelease];
colorThumb.tag = RMProductAttributesCellColorThumbTag;
colorThumb.hidden = YES;
[cell.contentView addSubview:colorThumb];
}
RMProductAttribute *attr = (RMProductAttribute *)[_product.attributes objectAtIndex:indexPath.section];
RMProductAttributeValue *value = (RMProductAttributeValue *)[attr.values objectAtIndex:indexPath.row];
cell.textLabel.text = value.name;
cell.textLabel.backgroundColor = [UIColor clearColor];
UIView *colorThumb = [cell viewWithTag:RMProductAttributesCellColorThumbTag];
colorThumb.hidden = !attr.isColor;
cell.indentationLevel = (attr.isColor ? 1 : 0);
if (attr.isColor) {
colorThumb.layer.cornerRadius = 6.0;
colorThumb.backgroundColor = value.color;
}
[self updateCell:cell atIndexPath:indexPath];
return cell;
}
これは問題なく正常に表示されます。
私の唯一の問題は、「color」行を選択すると、フェードトゥブルーの選択アニメーション中に、カスタムUIView(colorThumb)が非表示になることです。選択/選択解除アニメーションが終了した直後に再び表示されますが、これにより醜いアーティファクトが生成されます。
これを修正するにはどうすればよいですか?サブビューを適切な場所に挿入しませんか?
(didSelectRowAtIndexPathには特別なものはありません。セルのアクセサリをチェックボックスに変更するか、何も変更せず、現在のindexPathの選択を解除します)。