UITableView 接收自定义 UITableViewCell 但没有显示
Posted
技术标签:
【中文标题】UITableView 接收自定义 UITableViewCell 但没有显示【英文标题】:UITableView receives custom UITableViewCell but nothing is shown 【发布时间】:2014-06-14 13:31:22 【问题描述】:我正在使用自定义 TableViewCell 测试 UITableView。自定义单元格设计在一个 .xib 文件中,并且有自己的类称为单元格,它是 UITableViewCell 的子类:
细胞.m
#import "Cell.h"
@implementation Cell
- (void)awakeFromNib
// Initialization code
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
[super setSelected:selected animated:animated];
// Configure the view for the selected state
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
return self;
@end
ViewController 类中有 UITableView 称为表。它也是它的代表和数据源。两者都设置在情节提要中。它的代码如下所示:
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self.table registerClass:[Cell class] forCellReuseIdentifier:@"cell" ];
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return 5;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
UITableViewCell* cell = [self.table dequeueReusableCellWithIdentifier:@"cell"];
return cell;
@end
如果我运行该应用程序,我可以看到表格并且它具有正确数量的单元格。但未显示自定义单元格。表格的每个单元格都是白色的。
我阅读了几篇关于此类问题的帖子,但没有人帮助我。不同的教程说它应该像这样工作,但事实并非如此。我认为这可能是一个愚蠢的错误。感谢您的帮助。
【问题讨论】:
如果您不在情节提要上创建单元格,仅通过重用标识符出列是不够的。您必须从其 xib 加载单元格。 但这只是一个测试。后来在一个更大的项目中,我必须通过它的类加载它,因为我需要类中的方法。 @nhgrif 通过 xib 加载单元格的代码可以包含在类中。必须在某个地方存在打开 xib 文件并加载单元格的可视化表示的代码,除非您将其放在情节提要上(已打开并加载)或完全在代码中构建单元格。 好的。我想我差不多明白你的意思了。你能给我一个它想要的示例代码吗? @nhgrif 【参考方案1】:您说您正在使用 xib 文件来实例化您的单元格,但您正在使用这一行注册一个类而不是 xib
[self.table registerClass:[Cell class] forCellReuseIdentifier:@"cell" ];
尝试使用registerNib:forCellReuseIdentifier
: 代替
【讨论】:
感谢您的回答。但这只是一个测试项目,在我的大项目中我需要通过一个类来实例化它,因为我需要它的方法。例如设置特定的文本。据我了解,通过注册笔尖,您将无法调用 UITableViewCell 所在类的任何方法 您将能够调用方法,将单元格作为您的自定义子类而不是UITableViewCell
出列。像这样:MyCell* cell = [self.table dequeueReusableCellWithIdentifier:@"cell"]; cell.setSomeData = dataSource[indexPath.row]
@Burn,你所说的注册笔尖是不正确的。如果单元格的 UI 是在 xib 中设置的,那么您需要注册 nib。只要您将单元格设置为您的子类,那么您就可以访问该类的方法和属性。如果您完全在代码中使用没有 xib 或情节提要的 UI 制作单元格,您应该只注册该类。这是您问题的正确答案。【参考方案2】:
我猜您忘记在 *.xib 文件中设置自定义类名。 在 *.xib 属性中将自定义类属性设置为“单元格”。请检查该属性。
【讨论】:
感谢您的回答,但我做到了。 在我当前的项目中,我还使用 *.xib 文件来创建自定义单元格。 JobInfoCell *cell = (JobInfoCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];这段代码对我有用。 JobInfoCell 是我的单元格自定义类。在您的情况下,simpleTableIdentifier 是 @"cell" 字符串。以上是关于UITableView 接收自定义 UITableViewCell 但没有显示的主要内容,如果未能解决你的问题,请参考以下文章
UITableView 接收自定义 UITableViewCell 但没有显示
如何在已经是 NIB 的 UICollectionViewCell 中加载带有自定义单元格的 UITable