UIView子类,在UITableView单元格中具有属性

时间:2014-08-11 15:08:59

标签: ios objective-c uitableview uiview

我有一个包含我自己的UIView子类的原型单元格的表。 UIView子类绘制了一个彩色矩形。颜色由指向包含矩形的RGB值的结构的属性以及进入单元格中的UILabel的一些文本定义。

当桌子首次加载时,彩色矩形都具有正确的颜色,但是当标签始终保持正确时,当我滚动桌面视图时,颜色开始变得混乱。如果我触摸单元格以选择它,矩形将重新获得其预期的颜色。

一些代码:

@implementation EmbColorWell

@synthesize col;

...

- (void)drawRect:(CGRect)rect
{
    // Drawing code
    UIBezierPath *p;
    p=[UIBezierPath bezierPathWithRect:self.bounds];
    if(col)
    {
      [[UIColor colorWithRed:col->R() green:col->G() blue:col->B() alpha:1.0] setFill];
      [p fill];
    }
    [[UIColor blackColor] setStroke];
    [p stroke];
}


@end

col是指向C ++结构的指针。

我填写单元格的代码如下:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell;

    cell = [tableView dequeueReusableCellWithIdentifier:@"colourcell" forIndexPath:indexPath];


    EmbColorWell *colwellview=(EmbColorWell *)[cell.contentView viewWithTag:100];
    colwellview.col=colors+indexPath.row;

    UILabel *label=(UILabel *)[cell.contentView viewWithTag:101];
    label.text=[NSString stringWithCString:colors[indexPath.row].Name() encoding:NSUTF8StringEncoding];


    return cell;
}

我觉得这与细胞再利用有关,而UILabel中有一些神奇的东西可以正确处理这个问题并且我没有做到。或者我只是错过了一些非常明显的东西?

1 个答案:

答案 0 :(得分:0)

解决。显然,所需要的只是一个

[colwellview setNeedsDisplay];

在cellForRowAtIndexpath中设置属性后。真的很简单。将它合并到EmbColorWell类本身的setter方法中可能更加清晰。