1

当我使用带有类别的 UItableViewcell 的 layoutSubviews 方法时,就像下面的代码一样

@implementation UITableViewCell (forimage)

- (void)layoutSubviews{
    [super layoutSubviews];
    self.imageView.frame = CGRectMake(0, 0, 50, 50);
}

@end

当我使用下面的代码绘制单元格时,textLabel消失了,任何人都知道为什么会这样~,这是否意味着如果我使用 layoutSubviews,我必须在方法中编写我需要的所有子视图?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    RadioInfo *radioinfo = [radios objectAtIndex:indexPath.row];
    cell.textLabel.text = [NSString stringWithFormat:@"%@",radioinfo._name];

    if(!radioinfo._logo){
        if(self.tableView.dragging == NO && self.tableView.decelerating == NO){
            [self startPicDownload:radioinfo forIndexPath:indexPath];
        }

        cell.imageView.image = [UIImage imageNamed:@"1.jpg"];
    }
    else {
        cell.imageView.image = radioinfo._logo;
    }

    return cell;
}
4

1 回答 1

6

您要做的是添加到 UITableViewCell 的 layoutSubviews 方法的行为,而不是替换它。

要正确添加行为,请对单元格进行子类化并执行您自己的布局,如上所述,但在您的方法顶部添加一个 [super layoutSubviews] 以确保首先执行单元格自己的基本布局。

于 2011-06-30T09:29:08.253 回答