Ios 为什么自定义UITableCell不显示文本?

Ios 为什么自定义UITableCell不显示文本?,ios,objective-c,uitableview,uicolor,textcolor,Ios,Objective C,Uitableview,Uicolor,Textcolor,所以我尝试将UITableViewCell子类化以生成消息单元格,我一直在测试它,但似乎无法让它显示任何内容。它不是数据源,因为它工作正常,我没有尝试使用自定义单元格。我不知道为什么细胞里什么都没有出现 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ MessageCell * cell = (MessageCell *)[tab

所以我尝试将UITableViewCell子类化以生成消息单元格,我一直在测试它,但似乎无法让它显示任何内容。它不是数据源,因为它工作正常,我没有尝试使用自定义单元格。我不知道为什么细胞里什么都没有出现

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    MessageCell * cell = (MessageCell *)[tableView dequeueReusableCellWithIdentifier:@"cell"];

    if(cell == nil){
        cell = [[MessageCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }

    cell.messageContent.text = self.messages[indexPath.row][@"content"];

    return (UITableViewCell*) cell;
}
这是UITableViewCell子类中的init方法

-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if(self){

        //I played with the CGRect numbers but that's not it.
        messageContent = [[UILabel alloc]initWithFrame:CGRectMake(3,35, 200,30)];

        messageContent.textColor = [UIColor redColor];
        messageContent.backgroundColor = [UIColor whiteColor];
        messageContent.highlightedTextColor = [UIColor clearColor];
        messageContent.adjustsFontSizeToFitWidth = YES;
        [self.contentView addSubview:messageContent];
    }
  return self
}

第一次检查使用以下行:

cell.messageContent.text = @"asdfasdf";
如果它能正常工作,那么它就不会出问题

self.messages[indexPath.row][@"content"] 

如果您使用的是故事板,那么方法
-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString*)reuseIdentifier大多数情况下肯定不会接到电话

将此方法添加到MessageCell.h:

-(void)setupCellWithText:(NSString*)text

将实现添加到MessageCell.m:

- (void)setupCellWithText:(NSString *)text{
    messageContent = [[UILabel alloc]initWithFrame:CGRectMake(3,35, 200,30)];

    messageContent.textColor = [UIColor redColor];
    messageContent.backgroundColor = [UIColor whiteColor];
    messageContent.highlightedTextColor = [UIColor clearColor];
    messageContent.adjustsFontSizeToFitWidth = YES;
    [self.contentView addSubview:messageContent];
    messageContent.text = text;
}
现在修改您的委托方法:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    MessageCell * cell = (MessageCell *)[tableView dequeueReusableCellWithIdentifier:@"cell"];

    if(cell == nil){
        cell = [[MessageCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }

    [cell setupWithText:[self.messages[indexPath.row][@"content"]]];

    return (UITableViewCell*) cell;
}

希望这有帮助。很抱歉输入错误。

创建自定义UITableViewCell时,tableView需要了解它。这是怎么做的。这会出现在UITableViewController的viewDidLoad中:

[self.tableView注册表类:[MessageCell类]forCellWithReuseIdentifier:@“cell”]

现在,您的TableView了解了您的类,无需再进行角色转换

额外小费!你不需要这个:

if(单元格==nil){
cell=[[MessageCell alloc]initWithStyle:UITableViewCellStyleDefault重用标识符:@“cell”];
}

dequeueReusableCellWithIdentifier
已经为您完成了这项工作


这是整个事情的样子

- (void)viewDidLoad {
    [super viewDidLoad];

    // Register custom cell for table view
    [self.tableView registerClass:[MessageCell class] forCellWithReuseIdentifier:@"cell"];

}



-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    MessageCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];

    cell.messageContent.text = self.messages[indexPath.row][@"content"];

    return cell;
}

**我刚刚在浏览器中写了这篇文章,请原谅我的错误

检查设置您的
UITableViewDelegate
UITableViewDataSource

关于Xib:见下图

或者在
ViewDidLoad
中:

self.mTableView.delegate = self;
self.mTableView.dataSource = self;

希望这有帮助

您能否确认您正在调用registerClass:forCellReuseIdentifier:someplace以确保您的自定义单元格由数据组提供?。(这可能是我对问题原因的猜测)您必须告诉tableView它应该为重用标识符提供哪个类,而这并没有显示在任何地方。如果它是UITableViewCell并试图访问不存在的messageContent属性,我希望它会抛出异常。你是在什么地方这么做的,也许吧?或者,尽管您对此发表了评论,但框架可能是一个问题。它的y原点为35,高度为30,默认行高度为44。有可能它被切断,文本将在单元格的内容框之外绘制。
self.messages[indexPath.row][@“content”]
返回什么?messageContent是公共变量吗?它似乎是一个私有变量,因为它没有u或self。但您可以通过UITableView createCell委托方法访问它。你有两个变量吗。1 private 1 publicIt是在MessageCell.m文件中合成的公共变量,self.messages[indexPath.row][@“content”]返回一个字符串,这不是代码中的错误。这给了我一个“发送到实例的无法识别的选择器”运行时出错。你从哪里得到的?当我尝试调用setupCellWithText方法时,不是这样的。另外,如果从xib文件执行,我认为不需要在代码中设置委托和数据源,对吗?但是如果从未调用initWithStyle,单元格是否永远不会正确设置?因为所有的代码格式化和样式化都是用这个方法完成的。苹果的文档只显示一个初始化器。为了确保调用它,只需在初始化器上设置一个断点。