自定义单元格未出现在表格视图中
Posted
技术标签:
【中文标题】自定义单元格未出现在表格视图中【英文标题】:custom cell not appear in tableview 【发布时间】:2013-02-14 07:22:39 【问题描述】:我使用故事板。我在情节提要中为我的 Cell 创建了新类,我用 Reuse Identifier “userFullCell” 编写。我的 Cell 类.h
#import <UIKit/UIKit.h>
@interface UsefullLinksCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UIImageView *image;
@property (weak, nonatomic) IBOutlet UILabel *shortTitle;
@end
.m 默认
#import "UsefullLinksCell.h"
@implementation UsefullLinksCell
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self)
// Initialization code
return self;
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
[super setSelected:selected animated:animated];
// Configure the view for the selected state
属性 image 和 shortTitle 在情节提要中与单元格中的 UILabel 和 UIImageView 连接
然后在我的 UITableView 类中,我导入“UseFullLinksCell.h”并在 viewDidLoad 中写道:
[self.tableView registerClass:[UsefullLinksCell class] forCellReuseIdentifier:@"userFullCell"];
tableView 是我的出路:
@property (weak, nonatomic) IBOutlet UITableView *tableView;
然后我尝试创建单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
static NSString *CellIdentifier = @"userFullCell";
UsefullLinksCell *cell = (UsefullLinksCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSDictionary *info = resourceArray[indexPath.row];
if(info)
cell.image.image = info[@"logo"];
cell.shortTitle.text = info[@"title"];
return cell;
因此,单元格初始化,但未分配图像和文本,并且在方法结束后为单元格返回 0x0000000。如果我用这种方法为标准单元格代码创建,我的意思是 UITableViewCell *cell,一切都很好。我在哪里会犯错? PS对不起,我不能提供故事板的截图,因为我不是用我的电脑写的,如果你愿意,我稍后会提供图片
【问题讨论】:
什么是resourceArray,你在哪里初始化单元格? resourceArray - 带有字典的数组,包含我的信息。它适用于标准电池。我需要像写的 V-Xtreme 一样初始化吗?我需要创建 xib 吗?我使用故事板,所以我需要用 xib 文件重新创建? 【参考方案1】:您应该在创建自定义单元格的地方注册 xib 文件(使用 registerNib:forCellReuseIdentifier:),而不是类。另外,我不知道这是否会有所作为,但请替换:
UsefullLinksCell *cell = (UsefullLinksCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
有了这个(注意方法末尾的forIndexPath:):
UsefullLinksCell *cell = (UsefullLinksCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
编辑后:
如果在情节提要的表格视图中添加了一个自定义单元格,并为其指定了标识符“userFullCell”,那么您无需注册任何内容——事实上,注册您的类会使其无法正常工作。所以,只需注释掉那个 register 语句,看看它是否有效。
【讨论】:
我尝试替换但没有结果。关于我在其他答案中询问的 xib 文件,请阅读 @Neznajka,您在情节提要的哪个位置创建了这个单元格?它是否已添加到表格视图中,并且您在那里对其进行了修改? @Neznajka,如果您在情节提要中制作了单元格,请尝试我在编辑答案时所说的内容。 是的,我在情节提要的 UItableView 上添加了 UITableViewCell;给它添加Label、ImageView;在 IB 的标识符字段中写入“userFullCell”。你的意思是,我可以删除方法 registerClass: forCellReuseIdentifier: ? @Neznajka,是的,你可以删除它。【参考方案2】:你错过了什么:
NSArray *objects=[[NSBundle mainBundle]loadNibNamed:@"UsefullLinksCell" owner:self options:nil];
UsefullLinksCell *cell =[objects objectAtIndex:0];
这将为您提供自定义单元格的对象。
【讨论】:
我在storyboard中创建的,我没有xib =(或者我错了,有什么不懂?【参考方案3】:我认为你必须做到以下几点
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self)
// Initialization code
image=[[UIImageView alloc] initWithFrame:CGRectMake(0,0,50.0,50.0)];
shortTitle=[[UILabel alloc] initWithFrame:CGRectMake(60.0,0.0,200.0,50.0)];
return self;
其他一切都应该工作。问题是你的组件没有在任何地方初始化,要么它应该从 xib 加载,要么你必须手动初始化它们。
希望这会有所帮助。
【讨论】:
谢谢,我晚上晚些时候试试这个检查。以上是关于自定义单元格未出现在表格视图中的主要内容,如果未能解决你的问题,请参考以下文章