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 *) 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.
AQGridViewCell
– appelons-la MyGridViewCell
. view2
), définissez la propriété tag
(peut être effectuée dans IB) sur 1. view2
, décorer votre cellule, comme vous le souhaitez. 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]; }