将UIImageView添加到自定义UITableViewCell

时间:2012-10-26 00:28:41

标签: objective-c ios xcode uitableview uiimageview

我似乎无法将此imageview添加到我的自定义uitableviewcell类中,我无法弄明白。这是我的代码:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
        [self layoutCell];
    }
    return self;
}

- (void)layoutCell
{
    self.videoImageView = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 310, 120)];
    [self.videoImageView setImage:[UIImage imageNamed:@"myImage.jpg"]];
    [self.contentView addSubview:self.imageView];
}

在调试器中,我注意到,一旦我将imageview添加为contentview的子视图,如果有帮助,框架将被重新分配给(0,0,0,0)。我真的不知道最近会发生什么。如果有人有任何建议,那将是很棒的。我也尝试将imageview直接添加到单元格的视图本身,但无济于事。 (而且我非常肯定那是错的)。

Tahnks!

3 个答案:

答案 0 :(得分:2)

您不应该在init单元格方法中设置图像。你需要将它分开。

答案 1 :(得分:0)

实施layoutSubviews方法并检查这是否有所不同。它应该解决这个问题。

- (void)layoutSubviews
{
  videoImageView.frame = CGRectMake(5, 5, 310, 120);
}

<强>更新

尝试从layoutCell方法更改init方法。而是在tableview的[cell layoutCell]方法中将其称为cellForRowAtIndexPath。这将确保即使在重新加载时调用dequeureuse,它也会正确设置UIImage和frame。您只需在self.videoImageView = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 310, 120)] ;方法中添加init即可。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code
        self.videoImageView = [[[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 310, 120)] autorelease]; //no need of autorelease if ARC is used
    }
    return self;
}

- (void)layoutCell
{
    self.videoImageView.frame = CGRectMake(5, 5, 310, 120);
    [self.videoImageView setImage:[UIImage imageNamed:@"myImage.jpg"]];
    [self.contentView addSubview:self.videoImageView];
}

cellForRowAtIndexPath

//create cell
[cell layoutCell];

return cell;

答案 2 :(得分:0)

您分配self.videoImageView,然后将self.imageView添加到contentView(似乎是错误输入)。您也可以像其他人一样建议将您的UI init方法移动到initWithStyle之外的其他位置。这会有所帮助。