如何在UITableView中的所有单元格中添加图像?

时间:2010-10-29 13:48:14

标签: objective-c

我在

中使用它
- (UITableViewCell *)tableView:(UITableView *)atable cellForRowAtIndexPath:(NSIndexPath *)indexPath {

  UIImage *image = [[UIImage alloc] imageNamed:@"arrow.jpg"];
  cell.imageView.image = image; 
  return cell;
}

cell.imageView.image正在抛出错误..

3 个答案:

答案 0 :(得分:0)

我假设您的意思是运行时错误,因为该代码不会编译(因为未声明单元格)。

这一行:

UIImage *image = [[UIImage alloc] imageNamed:@"arrow.jpg"];

应该是:

UIImage *image = [UIImage imageNamed:@"arrow.jpg"];

imageNamed是一个UIImage类方法,而不是实例方法。

修改
根据您的要求,将图像放在右侧而不是左侧,您可以尝试这样做:

UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.jpg"]];
cell.accessoryView = iv;
[iv release];

如果您的单元格布局需要比内置布局更灵活,则需要将自己的视图添加到cell.contentView或仅在IB中设计自定义单元格。

答案 1 :(得分:0)

我在一个正在开发的游戏中使用了这种方法。

您继承了UITableViewCell,然后以编程方式将UIImageView和UILabel添加到单元格中。这为您提供了一种自定义单元格外观的好方法。

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
        // Initialization code
        headerLabel = [[UILabel alloc]init];
        headerLabel.textAlignment = UITextAlignmentLeft;

        imageV = [[UIImageView alloc] init];

        descriptionLabel.font = [UIFont fontWithName:@"Marker Felt" size:14];
        descriptionLabel = [[UILabel alloc]init];
        descriptionLabel.textAlignment = UITextAlignmentLeft;
        descriptionLabel.font = [UIFont fontWithName:@"Marker Felt" size:11];
        descriptionLabel.lineBreakMode = UILineBreakModeWordWrap;
        descriptionLabel.numberOfLines = 0;

        [self.contentView addSubview:headerLabel];
        [self.contentView addSubview:descriptionLabel];
        [self.contentView addSubview:imageV];
    }
    return self;
}

- (void)layoutSubviews {
    [super layoutSubviews];
    CGRect contentRect = self.contentView.bounds;
    CGFloat boundsX = contentRect.origin.x;
    CGRect frame;

    frame= CGRectMake(boundsX+60 ,3, 200, 15);
    headerLabel.frame = frame;

    frame= CGRectMake(boundsX+60 ,18, 260, 39);
    descriptionLabel.frame = frame;

    frame= CGRectMake(boundsX+3 , 3, 54, 54);
    imageV.frame = frame;
}

此外,您还必须更改UITableView类中的方法:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *CellIdentifier = @"Cell";

    AchievementCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[AchievementCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    [cell returnCellAtIndex:indexPath.row];
    [cell returnImageAtIndex:indexPath.row];

    return cell;
}

随意提出有关代码的更多问题:)

答案 2 :(得分:0)

使用此.. ..

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

cell.imageView.image = [UIImage imageNamed:@"arrow.jpg"];
return cell;

}