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 但没有显示

自定义 UIView 中的 UItable

自行调整特定 UITableView 单元的大小

如何在已经是 NIB 的 UICollectionViewCell 中加载带有自定义单元格的 UITable

嵌入在 UIView 中的动态 UITableView - 计算高度

UITableView 部分标题内的下拉 UIView