2012-05-23 21 views
8

Tengo una tabla con n secciones. Cada sección contiene una fila. ¿Cómo crear la ruta de índice para la tabla? Hay un método que permite crear ruta del índice para todas las filas visibles [self.tableView indexPathsForVisibleRows] necesito algo similar como indexPathsForAllRows¿Cómo crear rutas de índice para todas las filas y todas las secciones para uitableview?

necesito todo esto para actualizar sólo los datos de la tabla, ya que el método [self.tableView reloadData]; todas las actualizaciones de la tabla con encabezados y pies de página . Es por eso que tengo que usar reloadRowsAtIndexPaths

+0

¿Por qué necesita todas las filas? –

+0

He actualizado la pregunta – Alex

+1

¿Por qué necesita actualizar las filas fuera de la pantalla? Se actualizarán en cellForRowAtIndexPath: siempre que su modelo se actualice –

Respuesta

10

No necesita volver a cargar todas las filas. Solo necesita volver a cargar las celdas visibles (es por eso que existe indexPathsForVisibleRows).

Las celdas que están fuera de pantalla obtendrán sus nuevos datos en cellForRowAtIndexPath: una vez que se vuelvan visibles.

+0

Nunca he pensado en usar indexPathForVisibleRows de esta manera. – Mark

3

Aquí está la solución en Swift 3

func getAllIndexPaths() -> [IndexPath] { 
    var indexPaths: [IndexPath] = [] 

    // Assuming that tableView is your self.tableView defined somewhere 
    for i in 0..<tableView.numberOfSections { 
     for j in 0..<tableView.numberOfRows(inSection: i) { 
      indexPaths.append(IndexPath(row: j, section: i)) 
     } 
    } 
    return indexPaths 
} 
3

Hice una extensión UITableView basado en respuesta @Vakas. También las secciones y filas tienen que ser controlados para > 0 para prevenir los choques de vacíos UITableView s:

extension UITableView{ 
    func getAllIndexes() -> [NSIndexPath] { 
     var indices = [NSIndexPath]() 
     let sections = self.numberOfSections 
     if sections > 0{ 
      for s in 0...sections - 1 { 
       let rows = self.numberOfRowsInSection(s) 
       if rows > 0{ 
        for r in 0...rows - 1{ 
         let index = NSIndexPath(forRow: r, inSection: s) 
         indices.append(index) 
        } 
       } 
      } 
     } 
     return indices 
    } 
} 
Cuestiones relacionadas