更改自定义UITableViewCell文本颜色

时间:2013-08-01 20:20:48

标签: objective-c cocoa-touch uitableview

我已经出现了几次,每次我都找不到“优雅”的解决方案。

问题: 我的客户UITableViewCell位于XIBInventoryCustomCell。该单元格为UILabelsUILabel的默认文字颜色为黑色。我有一个行数的索引数组,其中UILabel文本颜色需要为灰色。我的InventoryCustomCell中有一个公共方法,允许我设置UILabel的颜色。

该公共方法如下所示:

- (void)setCellAdded:(BOOL)cellAdded {

    UIColor *cellTextColor;
    if (cellAdded) {
        self.thumbImageView.alpha = 0.5f;
        cellTextColor = [UIColor lightGrayColor];
    } else {
        self.thumbImageView.alpha = 1.0f;
        cellTextColor = [UIColor blackColor];
    }

    self.titleLabel.textColor = cellTextColor;
    self.partNumberLabel.textColor = cellTextColor;
    self.priceLabel.textColor = cellTextColor;
    self.quanityLabel.textColor = cellTextColor;
    self.addButton.titleLabel.textColor = cellTextColor;
}

在我的UITableViewController课程中,我使用XIB注册课程。

[self.inventoryListTable registerNib:[UINib nibWithNibName:@"InventoryCustomCell" bundle:nil] forCellReuseIdentifier:@"InventoryCustomCellID"];

在我的cellForRowAtIndexPath我设置如下:

InventoryCustomCell *cell = (InventoryCustomCell *)[tableView dequeueReusableCellWithIdentifier:inventoryCellID forIndexPath:indexPath];

.....
Product *product = .. is grabbed from NSFetchedResultsController

if ([addedProducts containsObject:product.objectID])
     [cell setCellAdded:YES];
else
     [cell setCellAdded:NO];

return cell;

现在,如果我在setCellAdded中添加断点,则会输入右if块,以便将单元格标签颜色设置为灰色。所以我知道这实际上是被召唤的。

我认为这里的问题是,表视图是试图重用单元格,因为它们都具有相同的标识符,现在它们不应该是灰色的,哪些不应该是灰色的。但如果是这种情况,那么我希望看到一些细胞随机灰色,而有些细胞不是在第一次调用setCellAdded之后。事实并非如此。没有任何一个细胞变成灰色但是把它们变成灰色的调用一直都是这样。

如果我使用的是默认UITableViewCell,我可能只会为黑/灰色单独cellIdentifier。由于我使用的是具有nib的自定义UITableViewCell,我必须注册一个cellIdentifier我不能使用此方法,同时只保留一个XIB文件。

我唯一想到的就是如果我创建了一个具有相同单元格视图的新XIB,但是将所有标签添加为灰色。然后我可以使用两个cellIdentifier方法,但这看起来很糟糕。

1 个答案:

答案 0 :(得分:0)

只需在自定义单元类的.h文件中添加UILabels的属性即可。然后在tableView:cellForRowAtIndexPath:做类似的事情:

InventoryCustomCell *cell = (InventoryCustomCell *)[tableView dequeueReusableCellWithIdentifier:inventoryCellID forIndexPath:indexPath];
cell.yourTextLabel.textColor = [UIColor grayColor];

return cell;