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