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

时间:2015-07-29 02:33:08

标签: ios objective-c uitableview uicolor textcolor

所以我尝试将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
}

4 个答案:

答案 0 :(得分:1)

使用以下行进行第一次检查:

cell.messageContent.text = @"asdfasdf";

如果它的工作正常而不是

中的错误
self.messages[indexPath.row][@"content"] 

行。 。

答案 1 :(得分:0)

如果您使用的是故事板,那么-(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;
}

希望这会有所帮助。抱歉打字错误。

答案 2 :(得分:0)

当您创建自定义UITableViewCell时,tableView需要了解它。这是如何做。这是在UITableViewController的viewDidLoad:

[self.tableView registerClass:[MessageCell class] forCellWithReuseIdentifier:@"cell"];

现在你的tableViews了解你的类,不再需要进行强制转换。

奖金提示!你不需要这个:

if(cell == nil){ cell = [[MessageCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"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;
}

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

答案 3 :(得分:0)

选中设置UITableViewDelegateUITableViewDataSource

在Xib上:见下图。

enter image description here

ViewDidLoad

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

希望这有帮助!