2011-01-06 39 views
15

me gustaría seleccionar varias filas en una UITableView al igual que Apple no en la aplicación de alarma nativo (ver foto alt textseleccionar varias filas en UITableView

¿Cómo puedo hacer eso?

Todas las respuestas vi hasta ahora eran viejos (y dijeron "No se puede hacer") o se refieren a la selección de múltiples filas en la aplicación de correo nativa. Ese método no es lo que me gustaría porque primero tiene que ingresar en el modo "editar". desea poder seleccionar las filas de inmediato.

Espero que alguien pueda ayudar.

Christian

Respuesta

24

en

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

hacer

if([tableView cellForRowAtIndexPath:indexPath].accessoryType == UITableViewCellAccessoryCheckmark){ 
     [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone; 
    }else{ 
     [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 
    } 

Editar:

También tiene que utilizar una matriz que mapea las células controladas y en cellForRowAtIndexPath hay que verificar si el accessoryType se debe comprobar o no.

+6

Nunca debe almacenar el estado comprobado en las celdas de la tabla ellos mismos - pueden reutilizarse para varias filas cuando la tabla se desplaza y tendrá que restaurar el estado comprobado de alguna manera ... – Vladimir

+0

También tengo una matriz que mapea las celdas marcadas y en la celda para la fila en la ruta del índice. Compruebo si el tipo de accesorio debe marcarse o no –

8

Las filas "Seleccionadas" en la aplicación Reloj son celdas con el tipo de accesorio UITableViewCellAccessoryCheckmark.

las medidas posibles para lograr que son:

  1. tienda comprueban/no se comprueba el estado en alguna parte para cada fila.
  2. En cellForRowAtIndexPath: método para celular en propiedad comprobado de célula conjunto de filas accessoryType-UITableViewCellAccessoryCheckmark
  3. En cellForRowAtIndexPath: para la célula en la propiedad no comprobado set de celda de fila accessoryType-UITableViewCellAccessoryNone
  4. Cuando se selecciona célula (tapping) anular la selección, invertir su comprobado estado y la célula de recarga en ese camino índice
30

manera más fácil que he encontrado:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark; 
} 

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryNone; 
} 

Se puede ver que las células se seleccionan llamando:

NSArray *selectedCells = [self.tableView indexPathsForSelectedRows]; 
+0

Tu respuesta es asombrosa ... +1 pero tuve un pequeño problema ... Cómo obtener valor de NSArray. Si puede por favor editar su respuesta Gracias – GoCrazy

+1

Me gusta su solución, pero parece que si selecciono una celda, se seleccionan múltiples celdas, con un espacio de aproximadamente la altura de la pantalla. Voy a utilizar una matriz para almacenar el estado marcado para cada celda ahora. –

11

Juego con

tableView.allowsMultipleSelection

Esto me salvó horas de problemas Encontrado here.

+6

¿No es esto 'allowsMultipleSelection'? –

+1

Sí, permite la selección múltiple, no permite aceptar múltiples respuestas –

0

Si está utilizando Guiones gráficos, simplemente haga clic en la Vista de tabla y luego en el Inspector de atributos en el panel derecho, establezca la propiedad "selección" en "Selección múltiple". Lo he verificado usando Xcode versión 8.2.1.

Cuestiones relacionadas