example collection ios objective-c collectionview

ios - example - uicollectionviewcell indexpath



¿Cómo insertar Cell en UICollectionVIew mediante programación? (4)

Tengo un UICollectionView y funciona bien, pero quiero agregar algunos elementos de UICollectionViewCells programación en la vista de colección.

Entonces, ¿cómo puedo lograr esto?

Para aclarar aún más: cuando digo programáticamente me refiero a insertar una celda durante el tiempo de ejecución, cuando se viewDidLoad una acción, no cuando se carga la aplicación (usando el método viewDidLoad ). Sé cuándo se actualiza el modelo y se realiza la llamada a UICollectionView en el método insertItemsAtIndexPaths: . Debería crear nuevas celdas, pero no está haciendo eso, está arrojando un error.


... refiriéndose a la documentación de UICollectionView

Usted puede lograr:

Insertar, eliminar y mover secciones y elementos Para insertar, eliminar o mover una sola sección o elemento, siga estos pasos:

  1. Actualice los datos en su fuente de datos objeto.
  2. Llame al método apropiado de la vista de colección para insertar o eliminar la sección o el elemento.

Es fundamental que actualice su origen de datos antes de notificar a la vista de la colección de cualquier cambio. Los métodos de vista de colección asumen que su fuente de datos contiene los datos correctos actualmente. Si no lo hace, la vista de la colección podría recibir el conjunto incorrecto de elementos de su fuente de datos o solicitar elementos que no están allí y bloquear su aplicación. Cuando agrega, elimina o mueve un solo elemento mediante programación, los métodos de la vista de colección crean automáticamente animaciones para reflejar los cambios. Sin embargo, si desea animar varios cambios juntos, debe realizar todas las operaciones de insertar, eliminar o mover dentro de un bloque y pasar ese bloque al método performBatchUpdates: completed:. El proceso de actualización por lotes luego anima todos sus cambios al mismo tiempo y puede combinar libremente las llamadas para insertar, eliminar o mover elementos dentro del mismo bloque.

De su pregunta: por ejemplo, puede registrar un Reconocedor de gestos e Insertar una NUEVA celda haciendo lo siguiente:

en

// in .h @property (nonatomic, strong) NSMutableArray *data; // in .m @synthesize data // - (void)ViewDidLoad{ //.... myCollectonView.dataSource = self; myCollectionView.delegate = self; data = [[NSMutableArray alloc] initWithObjects:@"0",@"1", @"2" @"3", @"4", @"5",@"6", @"7", @"8", @"9", @"10", @"11", @"12", @"13", @"14", @"15", nil]; UISwipeGestureRecognizer *swipeDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(addNewCell:)]; swipeDown.direction = UISwipeGestureRecognizerDirectionDown; [self.view addGestureRecognizer:swipeDown]; //.. } -(void)addNewCell:(UISwipeGestureRecognizer *)downGesture { NSArray *newData = [[NSArray alloc] initWithObjects:@"otherData", nil]; [self.myCollectionView performBatchUpdates:^{ int resultsSize = [self.data count]; //data is the previous array of data [self.data addObjectsFromArray:newData]; NSMutableArray *arrayWithIndexPaths = [NSMutableArray array]; for (int i = resultsSize; i < resultsSize + newData.count; i++) { [arrayWithIndexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]]; } [self.myCollectionView insertItemsAtIndexPaths:arrayWithIndexPaths]; } completion:nil]; }


Aquí es cómo insertar un elemento en Swift 3:

let indexPath = IndexPath(row:index, section: 0) //at some index self.collectionView.insertItems(at: [indexPath])

Primero debes actualizar tus datos.


Si está insertando varios items en UICollectionView , puede usar performBatchUpdates:

[self.collectionView performBatchUpdates:^{ // Insert the cut/copy items into data source as well as collection view for (id item in self.selectedItems) { // update your data source array [self.images insertObject:item atIndex:indexPath.row]; [self.collectionView insertItemsAtIndexPaths: [NSArray arrayWithObject:indexPath]]; } }


– insertItemsAtIndexPaths: hace el trabajo