自定义单元格集ImageView

时间:2014-05-22 16:33:20

标签: ios objective-c uitableview uiimageview

我制作了自定义UITableViewCell并将UIImageView添加到单元格中 然后,当我构建时,应用程序异常终止,并显示以下日志消息。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NewsCell setImageView:]: unrecognized selector sent to instance 0x109139f80'

我有这段代码。

ViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    NewsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[NewsCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    if (indexPath.section == 0) {
        switch (indexPath.row) {
            case 0:
                cell.imageView.image = [UIImage imageNamed:@"abcde.jpg"];
                break;
        }
    }
    return cell;
}

NewsCell.h

@interface NewsCell : UITableViewCell

@property (nonatomic, strong) UIImageView* imageView;
@property (nonatomic, strong) UILabel* titleLabel;

@end

NewsCell.m

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        self.imageView = [[UIImageView alloc]initWithFrame:CGRectMake(5, 5, 44, 40)];
        [self.contentView addSubview:self.imageView];
        self.titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 5, 200, 25)];
        self.titleLabel.font = [UIFont systemFontOfSize:24];
        [self.contentView addSubview:self.titleLabel];
    }
    return self;
}

如何修复它以将自定义单元格反映到tableView?

2 个答案:

答案 0 :(得分:2)

我可能错了,但我认为imageView属性已经在UITableViewCell上实现,并且它只是一个readonly属性。 在子类上重新实现它可能会产生冲突。

尝试更改imageView属性的名称,并告诉我它是否有效。

答案 1 :(得分:0)

转到 NewsCell.h ,您是否在 imageView 上看到警告?问题是您尝试用 readwrite属性替换只读属性。但它不允许你这样做。

你想要完成你目前正在做的事情,你可以尝试声明一个不同的imageView,如: -

<强> NewsCell.h

@interface NewsCell : UITableViewCell

@property (nonatomic, strong) UIImageView* imageView2;
@property (nonatomic, strong) UILabel* titleLabel;

@end

<强> NewsCell.m

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    self.imageView2 = [[UIImageView alloc]initWithFrame:CGRectMake(5, 5, 44, 40)];
    [self.contentView addSubview:self.imageView2];
    self.titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(50, 5, 200, 25)];
    self.titleLabel.font = [UIFont systemFontOfSize:24];
    [self.contentView addSubview:self.titleLabel];
}
return self;
}

ViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
 static NSString *CellIdentifier = @"Cell";
NewsCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[NewsCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
if (indexPath.section == 0) {
    switch (indexPath.row) {
        case 0:
            cell.imageView2.image = [UIImage imageNamed:@"abcde.jpg"];
            break;
    }
}
return cell;
}