我制作了自定义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?
答案 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;
}