2010-01-27 15 views
228

Necesito eliminar la fila 1 de una tabla en una función que he definido. Para usar deleteRowAtIndexPath debe usar un IndexPath con una sección y fila definidas. ¿Cómo puedo crear un indexpath como este?Cómo crear NSIndexPath para TableView

Una matriz con el int {1} como único miembro se bloqueará; el mensaje NSLog indica que la sección necesita ser definida también.

* Editar -> Código relativas a la celda borrar:

NSIndexPath *myIP = [[NSIndexPath alloc] indexPathForRow:0 inSection:0]; 
    NSArray *myArray = [[NSArray alloc] initWithObjects:myIP, nil]; 
// [self.tableView beginUpdates]; 
    [self.tableView deleteRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade]; 
// [self.tableView endUpdates]; 

Respuesta

612

Uso [NSIndexPath indexPathForRow:inSection:] para crear rápidamente una ruta del índice.

Editar: En Swift 3:

let indexPath = IndexPath(row: rowIndex, section: sectionIndex) 
+2

Gracias por la respuesta. El programa aún se cuelga - NSLog informa: *** Aplicación de finalización debido a la excepción no detectada 'NSInvalidArgumentException', razón: '*** - [NSIndexPath indexPathForRow: inSection:]: selector no reconocido enviado a la instancia –

+0

Originalmente pensé que sería un problema de IndexPath. ¿Hay algo más que esté pasando? Parece que podría estar utilizando el borrado incorrectamente. –

+0

- [NSIndexPath indexPathForRow: inSection:] no está en mi documentación. ¿Hay alguna respuesta que use API documentadas? (admito que es un poco raro que no esté allí. ¿¡WTH ?!) – Olie

115

indexPathForRow es un método de clase!

El código debe decir:

NSIndexPath *myIP = [NSIndexPath indexPathForRow:0 inSection:0] ; 
17

respuesta obligatorio en Swift: NSIndexPath(forRow:row, inSection: section)

Usted notará que NSIndexPath.indexPathForRow(row, inSection: section) no está disponible en rápida y debe utilizar el primer método para construir el indexPath.

+0

¡Tengo los mismos problemas! He usado 'forRow: 0' y' inSection: 0'. Funciona bien. ¡Solo contiene el primer objeto de la matriz! ¿Cómo puedo arreglarlo? ¿Me puedes ayudar? –

+0

¿Podrías dar más detalles? Se supone que este método devuelve un único NSIndexPath para la fila y la sección que especifique. Así que esto solo devolverá el indexPath [0,0] – JohnVanDijk

17

Para Swift 3 que es ahora: IndexPath(row: rowIndex, section: sectionIndex)

+6

Gracias por agregar Swift 3. El compilador me criticó por 'let cell = self.myTableView.cellForRow (en: NSIndexPath (fila: 0, sección: 1))' y lo cambió a 'let cell3 = self.myTableView.cellForRow (at: IndexPath (row: 0, section: 1))', por lo que parecen estar migrando de NSIndexPath a IndexPath –

Cuestiones relacionadas