xcode - tutorial - uicollectionviewdatasource
UICollectionView inside UIView (4)
- Arrastre el controlador uiview al stroryboard.
- Crea el nuevo archivo de clase para el nuevo uiviewcontoller
- Establecer la clase de nueva creación a nuestro controlador de vista. Y añada métodos de protocolo al archivo .h. -UICollectionViewDelegate, UICollectionViewDataSource
- Arrastre uicollectionview al controlador de vista, de manera predeterminada habrá una uicollectionviewcell con la vista de colección.
- 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í.
- 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.
- Configurar una imagen con la vista de imagen (esta imagen se mostrará repetidamente con la vista de colección).
- Establezca el delegado y la fuente de datos con la vista uicollection en el controlador de vista correspondiente.
Establecer métodos de fuente de datos: numberOfItemsInSection y cellForItemAtIndexPath.
Devuelva el recuento de celdas requerido con el método numberOfItemsInSection. Di 10 aquí.
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.
Arrastre un UICollectionView a su UIView y tómelo del tamaño adecuado.
Modifique su UIViewController para extender UICollectionViewDataSource y UICollectionViewDelegate
Implementar las funciones requeridas.
Control y arrastre desde su guión gráfico a la clase para crear un outlet ''collectionView''
En viewDidLoad (), conecte el delegado y el origen de datos a self
collectionView.delegate = self
ycollectionView.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>
.