【问题标题】:Use XIB from parent class in UITableViewCell在 UITableViewCell 中使用父类的 XIB
【发布时间】:2013-08-26 15:08:14
【问题描述】:

目前我有一个带有自定义 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 的每个子类。

【问题讨论】:

  • 撞到这个线程。暂时没有找到解决办法:(

标签: iphone ios objective-c uitableview


【解决方案1】:

当我理解你的正确时,你想从 XIB 加载一个单元格。
你不应该这样做

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

加载它

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

或类似的(请查看文档)。

还请记住,当您从 XIB 加载表格视图单元格之类的内容时,它会使用 initWithCoder: 进行初始化,而不是 initinitWithFrame:。这可能是您的网点未初始化的原因。

【讨论】:

  • 是的,谢谢你的指点。但是使用更常用的方式:cell = [[NSBundle mainBundle] loadNibNamed:@"NewsCell" owner:self options:nil][0]; 并没有改变什么。另外,我不是在 init 方法中设置 IBOutlet 的内容,而是在 configureCell:withNews 方法中。
猜你喜欢
  • 1970-01-01
  • 2019-12-12
  • 2012-06-17
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 2015-04-01
  • 2015-04-05
  • 1970-01-01
相关资源
最近更新 更多