uicollectionviewdatasource tutorial example collection xcode uiviewcontroller ios6 uicollectionview

xcode - tutorial - uicollectionviewdatasource



UICollectionView inside UIView (4)

  1. Arrastre el controlador uiview al stroryboard.
  2. Crea el nuevo archivo de clase para el nuevo uiviewcontoller
  3. Establecer la clase de nueva creación a nuestro controlador de vista. Y añada métodos de protocolo al archivo .h. -UICollectionViewDelegate, UICollectionViewDataSource
  4. Arrastre uicollectionview al controlador de vista, de manera predeterminada habrá una uicollectionviewcell con la vista de colección.
  5. Cree una nueva clase para la personalización de celda como la subclase de uicollectionviewcell y establezca la clase en la celda en el inspector de identidad. También configure el identificador de reutilización en el inspector de atributos, el nombre que deberíamos especificar para identificar el uicollectionviewcell. Di celular aquí.
  6. Arrastre y suelte una vista de imagen (puede ser cualquier cosa que desee) dentro de la celda de visualización de uicollection, dimensione para que quepa dentro.
  7. Configurar una imagen con la vista de imagen (esta imagen se mostrará repetidamente con la vista de colección).
  8. Establezca el delegado y la fuente de datos con la vista uicollection en el controlador de vista correspondiente.
  9. Establecer métodos de fuente de datos: numberOfItemsInSection y cellForItemAtIndexPath.

  10. Devuelva el recuento de celdas requerido con el método numberOfItemsInSection. Di 10 aquí.

  11. Devuelva la celda para mostrar con el cellForItemAtIndexPath.

    NSString * identifier = @"cell"; CollectionViewCellForDay * cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath]; return cell;

En este momento, debería poder tener una vista visual de una colección de 10 celdas :)

Estoy tratando de implementar un UICollectionView dentro de un UIView , pero no puedo descubrir cómo hacerlo. Hay muchos tutoriales sobre cómo usar UICollectionView con un UICollectionViewController , pero no cómo implementar uno en una vista normal. ¿Cómo haces eso?


Arrastre un UICollectionView a su UIView y tómelo del tamaño adecuado. Cree una propiedad que también sea un IBOutlet en su archivo .h para la vista de colección:

@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;

en UIView primero debe declarar su celda UICollectionView en -(void)awakeFromNib

[myCollectionView registerNib:[UINib nibWithNibName:@"nib file of collectionView cell" bundle:nil] forCellWithReuseIdentifier:@"identifier"];

entonces

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { custom class *cell1=[collectionView dequeueReusableCellWithReuseIdentifier:@"identifier" forIndexPath:indexPath]; return cell1; }


Y la versión Swift.

  1. Arrastre un UICollectionView a su UIView y tómelo del tamaño adecuado.

  2. Modifique su UIViewController para extender UICollectionViewDataSource y UICollectionViewDelegate

  3. Implementar las funciones requeridas.

  4. Control y arrastre desde su guión gráfico a la clase para crear un outlet ''collectionView''

  5. En viewDidLoad (), conecte el delegado y el origen de datos a self collectionView.delegate = self y collectionView.dataSource = self

Debería acabar luciendo así:

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) { } }


1) Arrastre un UICollectionView a su UIView y UIView tamaño adecuado.

2) Cree una propiedad que también sea un IBOutlet en su archivo .h para la vista de colección:

@property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;

3) Nuevamente en su archivo .h declare sus delegados, así que ahora su .h debería verse así:

@interface UtaQuickView : UIViewController <UICollectionViewDataSource, UICollectionViewDelegate> { } @property (nonatomic, retain) IBOutlet UICollectionView *myCollectionView;

4) Conecte su myCollectionView IBOutlet en su guión gráfico.

5) (opcional) Si está apuntando a algo más antiguo que iOS6, sintetice su propiedad myCollectionView . Si se dirige a iOS6, se lo sintetizará automáticamente. Esto se UICollectionViews a todas las propiedades, no solo a UICollectionViews . Por lo tanto, en iOS6, no es necesario que @synthesize myCollectionView = _myCollectionView en absoluto. Solo puede usar _mycollectionview donde sea que necesite para acceder a la propiedad.

6) En su archivo .m viewDidLoad , configure su delegate y dataSource.

_myCollectionView.delegate = self; _myCollectionView.dataSource = self;

7) Implementar los métodos de fuente de datos requeridos:

#pragma mark - UICollectionView DataSource - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

Desde allí puede implementar tantos o tan poco de los métodos UICollectionViewDelegate que necesite. Sin embargo, se requieren 2 según la documentación:

#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

Es importante tener en cuenta que puede sustituir <UICollectionViewDelegateFlowLayout> por <UICollectionViewDelegate> y seguir teniendo acceso a todos los métodos en <UICollectionViewDelegate> porque <UICollectionViewDelegateFlowLayout> es una subclase de <UICollectionViewDelegate> .

Documentación del protocolo UICollectionViewDataSource

Documentación del protocolo UICollectionViewDelegate