Tôi đang triển khai chế độ xem bảng chọn màu trong đó người dùng có thể chọn trong số 10 màu (tùy thuộc vào sản phẩm). Người dùng cũng có thể chọn các tùy chọn khác (như dung lượng ổ cứng, ...).
Tất cả các tùy chọn màu sắc nằm trong phần xem bàn riêng của họ.
Tôi muốn hiển thị một hình vuông nhỏ ở bên trái của textLabel hiển thị màu thực tế.
Ngay bây giờ tôi đang thêm một UIView hình vuông đơn giản, cung cấp cho nó màu nền chính xác, như thế này:
- (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;
}
Điều này hiển thị tốt mà không có vấn đề.
Vấn đề duy nhất của tôi là khi tôi chọn một hàng "màu", trong khi hoạt ảnh lựa chọn mờ dần sang màu xanh, UIView tùy chỉnh của tôi (colorThumb) bị ẩn. Nó được nhìn thấy một lần nữa ngay sau khi hoạt hình lựa chọn / giải trừ kết thúc, nhưng điều này tạo ra một tạo tác xấu xí.
Tôi nên làm gì để sửa lỗi này? Tôi không chèn subview vào đúng chỗ?
(Không có gì đặc biệt trong didSelectRowAtIndexPath, tôi chỉ thay đổi phụ kiện của ô thành hộp kiểm hoặc không có gì và bỏ chọn indexPath hiện tại).