配置单元格 drawRect:自定义 drawRect 仅在 tableView 中拖动后出现?

configure cell drawRect : custom drawRect only appears after a drag in tableView?

我有一个 splitViewController,destinationController 是一个 tableViewController,如果自定义 class "MyCell",我想控制单元格的设计。 drawRect 仅在我拖动 tableView 时被调用:红色背景仅在单元格从屏幕上消失并重新出现后出现。你知道为什么吗?

//in viewController.m
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    MyCell*cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:@"CellDetail"] ;
    [self configureCell:cell atIndexPath:indexPath];
    return cell;
}
- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    RDV *object = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = [[object valueForKey:@"name"] description];
    [cell setNeedsDisplay];
    [cell layoutIfNeeded];
}



//in MyCell.m
-(void)drawRect:(CGRect)rect{
    [self setBackgroundColor: [UIColor redColor]];
}

我不确定为什么直到滚动才显示颜色变化,但无论如何您都不应该为此目的使用 drawRect。将背景颜色代码放在单元格的init方法中或awakeFromNib中。

答案有点棘手,我不得不使用 MyRealCell* cell = (MyRealCell*)[tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath];forIndexPath,这样,contentView 框架包含一些东西,否则它是 0,0,0,0.

我假设您没有在 table 视图中注册单元格。为了

MyCell*cell = (MyCell*)[tableView dequeueReusableCellWithIdentifier:@"CellDetail"] ;

returnsnil。因为您可以向 nil 发送任何消息,并且总是会返回 0x0nil,请求帧 returns 和 CGRectZeo.

为什么拖动会使单元格出现并不明显。你实施 tableView:cellWillAppear: 或类似的吗?