在UITableViewCell中自定义绘制UIView

时间:2014-01-21 17:44:13

标签: ios objective-c uiview ios7

我正在创建一个UIView(实际上是contentView中的一个子视图),它绘制了一个stat。

此视图在UITableview的每个单元格中设置。

我在以下位置配置单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellConstant = @"constant";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellConstant forIndexPath:indexPath];

    SCHGraphicView *statView = (SCHGraphicView *)[cell viewWithTag:TAG_STAT_GRAPH];
    [statView setStatValues:[self.listOfListWithValues objectAtIndex:indexPath.row] andBase:10 andColorBar:[UIColor whiteColor]];    

    return cell;
}

这是drawRect方法,现在处于测试模式,我只绘制了一个值。

- (void)drawRect:(CGRect)rect
{
     CGFloat heightCalculate = ([(NSNumber *)[self.statValues objectAtIndex:1]intValue] *self.frame.size.height) / self.base;
    //We create the path
    UIBezierPath *path = [UIBezierPath bezierPathWithRect:CGRectMake(0,self.frame.size.height - heightCalculate, self.frame.size.width, heightCalculate)];
    path.lineWidth = 0;
    [self.barColor setFill];

    CGContextRef context = UIGraphicsGetCurrentContext();

    //We saved the context
    CGContextSaveGState(context);



    [path fill];
    //Restore the contex
    CGContextRestoreGState(context);
}

虽然我每次都在cellForRowAtIndexPath:修改统计值,这些值不会调用[UIView setNeedDisplay]所以我不会每次重绘它,因为每个单元格中的统计数据永远不会改变但是不同如果比较单元格之间的统计数据,则为stat。

问题是当我滚动并回到第一个单元格时,这不包含最初绘制的统计数据。

我实现这一目标的唯一方法是每次cellForRowAtIndexPath中的统计信息重绘 但是我认为在绘制视图时第一次保存了预览,这用于提高性能,如果调用[UIView setNeedDisplay],视图会再次重绘。

有什么想法吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

我在drawRect:上实施UITableViewCell时遇到了一些奇怪的问题,似乎你不应该这样做。您应该创建UIView并将其添加为contentView属性的子视图。这里和网络上有很多关于drawRect:UITableViewCell的问题/答案,其中大多数建议您不要这样做。

subclassed UITableViewCell - backgroundView covers up anything I do in drawRect