J'essaie d'implémenter une UICollectionView
dans une UIView
, mais je ne peux pas savoir comment le faire. Il y a beaucoup de tutoriels sur la façon d'utiliser UICollectionView
avec une UICollectionViewController
, mais pas comment en implémenter dans une vue normale. Comment faites-vous cela?
1) Faites glisser un UICollectionView
dans votre UIView
et redimensionnez-le de manière appropriée.
2) Créez une propriété qui est également un IBOutlet
dans votre fichier .h
pour la vue de collection:
@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;
3) Encore une fois dans votre fichier .h
, déclarez vos délégués, donc maintenant votre .h
devrait ressembler à ceci:
@interface UtaQuickView : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate> {
}
@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;
4) Connectez votre myCollectionView
IBOutlet
dans votre story-board.
5) (facultatif) Si vous ciblez un élément plus ancien que iOS6, synthétisez votre propriété myCollectionView
name__. Si vous ciblez iOS6, il le synthétisera automatiquement pour vous. Cela vaut pour toutes les propriétés, pas seulement UICollectionViews
name__. Donc, dans iOS6, vous n'avez pas besoin de @synthesize myCollectionView = _myCollectionView
du tout. Vous pouvez simplement utiliser _mycollectionview
partout où vous avez besoin d'accéder à la propriété.
6) Dans votre fichier .m
viewDidLoad
name__, définissez votre delegate
et dataSource.
_myCollectionView.delegate = self;
_myCollectionView.dataSource = self;
7) Implémentez les méthodes de source de données requises:
#pragma mark - UICollectionView DataSource
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
À partir de là, vous pouvez mettre en œuvre autant de méthodes que vous le souhaitez, à savoir UICollectionViewDelegate
name__. Cependant, 2 sont nécessaires selon la documentation:
#pragma mark - UICollectionViewDelegate
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingSupplementaryView:(UICollectionReusableView *)view forElementOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath
Il est important de noter que vous pouvez remplacer <UICollectionViewDelegateFlowLayout>
par <UICollectionViewDelegate>
tout en ayant accès à toutes les méthodes de <UICollectionViewDelegate>
car <UICollectionViewDelegateFlowLayout>
est une sous-classe de <UICollectionViewDelegate>
.
Et la version Swift
Faites glisser un UICollectionView dans votre UIView et le dimensionner correctement.
Modifier votre UIViewController pour étendre UICollectionViewDataSource et UICollectionViewDelegate
Implémenter les fonctions requises
Faites glisser votre scénario vers la classe pour créer un point de vente 'collectionView'.
Dans viewDidLoad (), connectez le délégué et la source de données à collectionView.delegate = self
et collectionView.dataSource = self
Cela devrait ressembler à ceci:
class CustomerViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate
{
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad() {
collectionView.delegate = self
collectionView.dataSource = self
}
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
}
func collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
}
func collectionView(collectionView: UICollectionView, didEndDisplayingSupplementaryView view: UICollectionReusableView, forElementOfKind elementKind: String, atIndexPath indexPath: NSIndexPath) {
}
}
Faites glisser un UICollectionView dans votre UIView et redimensionnez-le correctement. Créez une propriété qui est également un IBOutlet dans votre fichier .h pour la vue de collection:
@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;
dans UIView, vous devez d'abord déclarer votre cellule UICollectionView dans -(void)awakeFromNib
[myCollectionView registerNib:[UINib nibWithNibName:@"nib file of collectionView cell" bundle:nil] forCellWithReuseIdentifier:@"identifier"];
puis
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
custom class *cell1=[collectionView dequeueReusableCellWithReuseIdentifier:@"identifier" forIndexPath:indexPath];
return cell1;
}
Définissez les méthodes de source de données - numberOfItemsInSection et cellForItemAtIndexPath.
Renvoie le nombre de cellules requis avec la méthode numberOfItemsInSection. Dis 10 ici.
Renvoie la cellule à afficher avec cellForItemAtIndexPath.
NSString * identifier = @"cell";
CollectionViewCellForDay * cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
return cell;
A présent, vous devriez pouvoir visualiser une vue de la collection de 10 cellules :)