目前,我有一个自定义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:
初始化的,而不是init
或initWithFrame:
初始化的。这可能是为什么您的门店未初始化的原因。