UITableView dans UICollectionViewCell

Je veux avoir UITableView dans mon UICollectionViewCell. Je voudrais ensuite modifier dynamicment le contenu de UITableView à travers la sous-class de UICollectionViewCell.

Ma sous-class de UICollectionViewCell .h ressemble à ceci:

@interface ShopCollectionCell : UICollectionViewCell <UITableViewDelegate, UITableViewDataSource> @property (nonatomic, weak) IBOutlet UILabel *myLabel; @property (weak, nonatomic) IBOutlet UITableView *tableView; @end 

en .m est juste des methods standard UITableView:

 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return 3; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"bla"]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"bla"]; } cell.textLabel.text = @"test"; return cell; } 

dans mon UIViewController j'ai un UICollectionView où je fais ce qui suit:

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ ShopCollectionCell *cell = (ShopCollectionCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"shopDetailCell" forIndexPath:indexPath]; if (cell == nil) { cell = [[ShopCollectionCell alloc] init];//:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } cell.myLabel.text = @"test"; return cell; } 

Je ne comprends pas pourquoi je reçois un object zombie?!

entrez la description de l'image ici

Pour pouvoir utiliser dequeueReusableCellWithReuseIdentifier:forIndexPath vous devez également save une class ou une plume pour cet identificateur de cellule.

Dans votre viewDidLoad, vous devez utiliser l'une des deux methods UITableView ci-dessous pour save une cellule

 registerNib:forCellReuseIdentifier: registerClass:forCellReuseIdentifier: 

Consultez les documents UITableView pour plus de détails sur la façon de les utiliser

Vous devriez alors être capable de supprimer complètement les lignes suivantes:

  if (cell == nil) { cell = [[ShopCollectionCell alloc] init];//:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } 

MISE À JOUR: Le message d'erreur que vous m'avez envoyé m'a aidé à comprendre ce qui n'allait pas. Vous chargez la NIB avec "self" en tant que propriétaire, mais vous remplacez ensuite self par la première vue chargée à partir de la NIB. Je voudrais utiliser un UIView comme rootview dans votre NIB, et append cette vue chargée dans la propriété contentView de la cellule.

Essayez de supprimer alloc et init de la cellule de vue de collection. dequeueReusableCellWithReuseIdentifier doit être suffisant. De la documentation Apple:

Cette méthode supprime une cellule existante si elle est disponible ou en crée une nouvelle en fonction du file de class ou nib précédemment enregistré.

Faire suite à 3 changements a fonctionné pour moi.

  1. Dans ShopCollCell.xib, mappez tableView delegate et ShopCollectionCell class ShopCollectionCell et non au propriétaire de File.

  2. In ShopCollectionCell.m implémente initWithCoder: méthode.

  3. Dans ShopCollectionCell.m, implémentez la méthode awakeFromNib et enregistrez UITableViewCell class UITableViewCell pour mytableView .

     - (id)initWithCoder:(NSCoder *)aDecoder { if (self = [super initWithCoder:aDecoder]) { } return self; } - (void)awakeFromNib { [self.myTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"bla"]; }