2010-09-17 5 views
1

J'essaie de créer une vue de grille contenant plusieurs lignes et colonnes de vues d'image. Comme une vue de 4 lignes et 4 colonnes avec chaque cellule contenant une vue d'image. Quelqu'un peut-il s'il vous plaît me dire la meilleure approche pour créer une telle vue? Merci et meilleures salutations ...Suggestion sur la vue de grille

Répondre

1

Je l'ai fait par UITableView. Je fais un UITableViewCell personnalisé, chaque cellule contient 4 boutons pour 4 colonnes et ajuste chaque cellule cell pour 4 lignes par page.

2

Je ferais descendre un objet GridView de UIView. Cela aurait une propriété numberOfColumns et une propriété items:

@class GridView : UIView { 
    NSUInteger numberOfColumns; 
    NSArray *items; 
} 

@property (nonatomic, assign) NSUInteger numberOfColumns; 
@property (nonatomic, copy) NSArray *items; 

@end 

Le tableau articles contiendraient les UIViews que vous souhaitez afficher dans votre vue de la grille. Ensuite, chaque fois que la propriété numberOfColumns ou la propriété items est définie, vous appelez également [self setNeedsLayout]; dans leur setter-à-dire pour les articles propriété que vous souhaitez supprimer les anciens, ajouter les nouveaux et dire le cadre que vous devez Restructurer

- (void)setItems:(NSArray *)value { 
    if (value != items) { 
     for (UIView *item in items) 
      [item removeFromSuperview]; 
     [items release]; 

     items = [value copy]; 
     for (UIView *item in items) 
      [self addsubview:item]; 

     [self setNeedsLayout]; 
    } 
} 

Votre méthode layoutSubviews serait itérer le tableau d'éléments et de les placer dans le bon nombre de colonnes à savoir quelque chose comme

- (void)layoutSubviews { 
    [super layoutSubviews]; 

    CGFloat width = [slef frame].size.width/numberOfColumns; 
    CGFloat height = width; 
    CGFloat xoffset = 0; 
    CGFloat yoffset = 0; 

    for (UIBView *item in items) { 
     [item setFrame:CGRectMake(xoffset, yoffset, width, height)]; 
     xoffset += width; 
     if (xoffset >= [self frame].size.width) { 
      xoffset = 0; 
      yoffset += height; 
     } 
    } 
} 

Je n'ai pas testé ce code, mais il devrait fixer les éléments dans une grille où chaque élément est carré.

J'espère que c'est un bon point de départ.