Wdrażam widok tabeli wyboru kolorów, w którym użytkownik może wybrać, powiedzmy, 10 kolorów (w zależności od produktu). Użytkownik może również wybrać inne opcje (takie jak pojemność dysku twardego, ...).
Wszystkie opcje kolorów znajdują się w osobnej sekcji widoku tabeli.
Chcę wyświetlić mały kwadrat po lewej stronie textLabel pokazujący rzeczywisty kolor.
W tej chwili dodaję prosty kwadratowy UIView, nadaj mu poprawny kolor tła, taki jak ten:
- (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;
}
Wyświetla się dobrze bez problemów.
Moim jedynym problemem jest to, że kiedy wybieram wiersz „kolorowy”, podczas animacji wyboru przejścia do niebieskiego moje niestandardowe UIView (colorThumb) jest ukryte. Ponownie staje się widoczny tuż po zakończeniu animacji wyboru / odznaczenia, ale powoduje to brzydki artefakt.
Co powinienem zrobić, aby to naprawić? Czy nie wstawiam podview we właściwym miejscu?
(W didSelectRowAtIndexPath nie ma nic specjalnego, po prostu zmieniam akcesorium komórki na pole wyboru lub nic i odznaczam bieżącą ścieżkę indexPath).