目前我有自定义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的每个子类。
答案 0 :(得分:0)
当我理解你是正确的时,你想从XIB加载一个单元格 你不应该用
来做 UIViewController *c = [[UIViewController alloc] initWithNibName:@"NewsCell" bundle:nil];
但只将单元格放在XIB中,然后用
UITableViewCell *cell = [[NSBundle mainBundle] loadNibNamed:@"NewsCell"][0];
或类似(请检查文档)。
另外请记住,当您从XIB加载类似于表格视图的单元格时,它会使用initWithCoder:
初始化,而不是init
或initWithFrame:
。这可能就是为什么你的网点没有主动化的原因。