現在、次のようなカスタム UITableViewCells を含むニュースフィードがあります。
NewsCell.m
NewsCell.xib
NewsCell_Friends.m
NewsCell_Friends.xib
NewsCell_CheckinPhoto.m
NewsCell_CheckinPhoto.xib
[...]
NewsCell_Friends と NewsCell_Checkin は両方とも NewsCell から継承します (すべてのサブクラスで共有される titleLabel、dateLabel などのメソッドと要素)
現時点では、ニュースの種類ごとに非常に異なるレイアウト (Xib) があるため、NewsCell クラス自体は使用せず、サブクラスのみを使用しています。
ここで、ニュースフィードの 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_CheckinPhoto xib ではなく、NewsCell xib を使用していることに注意してください。
しかし、それは機能していません: nib ファイルは適切にロードされ、NewsCell.xib のコンテンツはセルに適切に表示されますが、NewsCell_CheckinPhoto 内のラベルの構成 (たとえば、titleLabel.text = @"Robert take a photo")クラスは機能しておらず、呼び出されていません。
NewsCell.xib ファイルでクラス タイプ *NewsCell_CheckinPhoto* を指定した場合にのみ機能しますが、NewsCell.xib を再利用して NewsCell の各サブクラスをサンプルと一意の表現でレンダリングすることはできません。