在UITableViewCell中使用父类中的XIB

时间:2013-08-23 14:11:31

标签: iphone ios objective-c uitableview

目前我有自定义UITableViewCells的新闻源,例如:

NewsCell.m
NewsCell.xib


NewsCell_Friends.m
NewsCell_Friends.xib
NewsCell_CheckinPhoto.m
NewsCell_CheckinPhoto.xib

[...]

NewsCell_Friends和NewsCell_Checkin从NewsCell继承(方法和元素,例如所有子类共享的titleLabel,dateLabel)

目前,我从未使用过NewsCell类本身,只使用子类,因为每种新闻都有一个非常独特的布局(Xib)。

现在让我们说,我希望在我的新闻源的UI方面有一个简单的实现,其中所有单元格具有相同的外观,相同的高度,相同的内容:titleLabel和dateLabel。 (例如实际上是通知提要)。

我想要做的是将NewsCell.xib重新用作各种类型的新闻,例如:下面:

NewsCell_CheckinPhoto *cell = [tableView dequeueReusableCellWithIdentifier:@"CheckinPhoto"];
    if (!cell){
        UIViewController *c = [[UIViewController alloc] initWithNibName:@"NewsCell" bundle:nil];
        cell = (NewsCell_CheckinPhoto *)c.view;
        cell.parent = self;
    }
    [cell configureCell:indexPath withNews:news];
    return  cell;

cellForRowAtIndexPath 委托方法中。

请注意,我在此控制器中使用的是NewsCell xib而不是NewsCell_CheckinPhoto xib。

但它不起作用:nib文件加载良好,NewsCell.xib的内容很好地显示在单元格中,但标签的配置(例如,titleLabel.text = @“Robert拍了一张照片”)在NewsCell_CheckinPhoto类中,既不工作也不调用。

仅当我在NewsCell.xib文件中指定类类型* NewsCell_CheckinPhoto *时才有效,但这不允许我重复使用NewsCell.xib来呈现具有样本和唯一表示的NewsCell的每个子类。

1 个答案:

答案 0 :(得分:0)

当我理解你是正确的时,你想从XIB加载一个单元格 你不应该用

来做

UIViewController *c = [[UIViewController alloc] initWithNibName:@"NewsCell" bundle:nil]; 但只将单元格放在XIB中,然后用

加载它

UITableViewCell *cell = [[NSBundle mainBundle] loadNibNamed:@"NewsCell"][0];

或类似(请检查文档)。

另外请记住,当您从XIB加载类似于表格视图的单元格时,它会使用initWithCoder:初始化,而不是initinitWithFrame:。这可能就是为什么你的网点没有主动化的原因。