Charger un AQGridViewCell à partir de XIB (ne fonctionne pas)

AQGridView class AQGridView et j'essaye de charger une cellule à partir d'un XIB . J'ai configuré le XIB comme une cellule personnalisée pour un UITableView , mais quand je tente de charger la cellule, il est simplement vide. Je me demandais s'il y avait un moyen plus facile de charger le XIB .

AQGridViewCell doit charger la cellule à partir d'un xib

 - (AQGridViewCell *) gridView: (AQGridView *) gridView cellForItemAtIndex: (NSUInteger) index { static NSSsortingng * CellIdentifier = @"cellID"; gridCell * cell = (gridCell *)[gridView dequeueReusableCellWithIdentifier: CellIdentifier]; if ( cell == nil ){ gridCell = [[gridViewCell alloc] initWithFrame: CGRectMake(0,0,_gridView.frame.size.width/2-4, _gridView.frame.size.height/2-8) reuseIdentifier:CellIdentifier]; cell = gridCell; self.gridCell = nil; } cell.title = @"Test Grid Item"; cell.date = @"Apr. 7, 2011"; return ( cell ); } 

Voici un article qui décrit comment charger un AQGridViewCell à partir de nib, avec un exemple de code. Consultez la section intitulée "AQGridViewCell réutilisable".

(Merci à pt2ph8 pour avoir signalé contentView .)

D'après ce que j'ai compris, je pense que cela est vide car ce qui s'affiche est le contentView la cellule. J'ai fini par charger IB sur ma vue personnalisée et l'append comme une sous-vue du contentView de la cellule quand la cellule est demandée.

Les développeurs d'AQGridView ont déjà affirmé sur GitHub que le support correct de l'IB sera ajouté dans le futur, mais ce post est daté d'août 2010, alors ne retenez pas votre souffle.

Cela m'a pris un peu de time, mais j'ai trouvé une façon différente de celle mentionnée dans le blog jlstrecker.

  1. Créez une sous-class de AQGridViewCell – appelons-la MyGridViewCell .
  2. Créez une plume pour cette cellule, connectez-la dans IB.
  3. Publiez une vue en haut de la vue de la cellule dans IB. C'est vrai, une vue au sumt d'une vue. Faites la taille exactement la même chose.
  4. Pour cette vue en haut de la vue (appelons-la view2 ), définissez la propriété tag (peut être effectuée dans IB) sur 1.
  5. Mettez tout ce que vous voulez sur le dessus de view2 , décorer votre cellule, comme vous le souhaitez.
  6. Utilisez le code suivant (bien sûr, changez le à vos besoins) dans votre sous-class de AQGridViewController :

`

 - (AQGridViewCell *)gridView:(AQGridView *)aGridView cellForItemAtIndex:(NSUInteger)index { static NSSsortingng *CellIdentifier = @"MyGridViewCell"; MyGridViewCell *cell = (MyGridViewCell *)[self.gridView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = (ZZProductGridViewCell *)[[[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil] objectAtIndex:0]; } [cell.contentView addSubview:[cell viewWithTag:1]]; //THIS IS THE IMPORTANT PART return cell; } 

Prendre plaisir!

Je ne suis pas familier avec AQGridView, mais je crois que vous pouvez tirer parti des capacités de chargement de Nib de NSBundle. Un extrait du projet exemple AdvancedTableViewCells illustre l'idée:

RootViewController.h

 @interface RootViewController : UITableViewController { ApplicationCell *tmpCell; } 

RootViewController.m

 ApplicationCell *cell = (ApplicationCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { [[NSBundle mainBundle] loadNibNamed:@"IndividualSubviewsBasedApplicationCell" owner:self options:nil]; cell = tmpCell; self.tmpCell = nil; } 

Dans IndividualSubviewsBasedApplicationCell.xib, vous devez définir la sortie de UITableViewCell comme étant la propriété tmpCell de RootViewController. Ensuite, comme un effet secondaire de l'appel de la méthode loadNibNamed de NSBundle, la propriété tmpCell est définie sur le RootViewController via le mécanisme de chargement Nib.

Ce que vous pouvez faire est de faire votre xib (uiview) déballer / charger dans la sous-class elle-même (qui a une méthode init différente de celle uitableviewcell), vous pouvez également connecter toutes les sockets à ce xib et append sa vue entière sous forme de sous-vue. replace contentview).

Pour le rendre encore plus rapide, vous pouvez faire uinib de ce xib et le réutiliser pour sauvegarder le disque i / o.

Construisez votre cellule normalement en utilisant IB, puis dans votre sous-class de AQGridViewCell, ajoutez

 - (void)awakeFromNib{ self.contentView.backgroundColor = [UIColor clearColor]; }