ฉันกำลังใช้มุมมองตารางตัวเลือกสีซึ่งผู้ใช้สามารถเลือกได้ระหว่างพูดสี 10 สี (ขึ้นอยู่กับผลิตภัณฑ์) ผู้ใช้ยังสามารถเลือกตัวเลือกอื่น ๆ (เช่นความจุของฮาร์ดไดรฟ์, ... )
ตัวเลือกสีทั้งหมดอยู่ในส่วน tableview ของตนเอง
ฉันต้องการแสดงสี่เหลี่ยมเล็ก ๆ ทางด้านซ้ายของ 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;
}
สิ่งนี้แสดงผลได้ดีโดยไม่มีปัญหา
ปัญหาเดียวของฉันคือเมื่อฉันเลือกแถว "สี" ในระหว่างการเคลื่อนไหวของการเลือกจาง ๆ ไปหาสีน้ำเงิน UIView ที่กำหนดเองของฉัน (colorThumb) ถูกซ่อนอยู่ มันสามารถมองเห็นได้อีกครั้งหลังจากที่แอนิเมชันส่วนที่เลือก / deselection สิ้นสุดลง แต่สิ่งนี้สร้างสิ่งประดิษฐ์ที่น่าเกลียด
ฉันควรทำอย่างไรเพื่อแก้ไขสิ่งนี้ ฉันไม่แทรกมุมมองย่อยในตำแหน่งที่ถูกต้องหรือไม่
(ไม่มีอะไรพิเศษใน didSelectRowAtIndexPath ฉันเพิ่งเปลี่ยนอุปกรณ์เสริมของเซลล์เป็นช่องทำเครื่องหมายหรือไม่ทำอะไรเลยและยกเลิกการเลือก indexPath ปัจจุบัน)