目前,我有一个自定义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 委托(delegate)方法中。

请注意,我在此 Controller 中使用NewsCell xib,而不是NewsCell_CheckinPhoto xib。

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

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

最佳答案

当我了解您的问题时,您想从XIB加载单元。
你不应该这样做
UIViewController *c = [[UIViewController alloc] initWithNibName:@"NewsCell" bundle:nil];但只将单元格放在XIB中,然后用
UITableViewCell *cell = [[NSBundle mainBundle] loadNibNamed:@"NewsCell"][0];
或类似内容(请检查文档)。

当从XIB加载诸如表 View 单元之类的内容时,请记住,它是使用initWithCoder:初始化的,而不是initinitWithFrame:初始化的。这可能是为什么您的门店未初始化的原因。

10-08 06:04