2011-01-06 11 views
15

Vorrei selezionare più righe in un UITableView, proprio come Apple non in app sveglia nativa (vedi foto alt textselezionare più righe nella UITableView

Come posso fare questo?

Tutte le risposte che ho visto finora erano vecchi (e dicevano "Can not do") o si riferiscono alla selezione di più righe nell'app nativa Mail.Questo metodo non è quello che vorrei perché devi prima entrare nella modalità "modifica". Voglio essere in grado di selezionare subito le righe

Spero che qualcuno possa aiutare

Christian

risposta

24

In

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

fare

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

Edit:

È inoltre necessario utilizzare una matrice che associa le cellule controllato ed in cellForRowAtIndexPath si deve verificare se l'accessoryType deve essere controllato o meno.

+6

Non si dovrebbe mai memorizzare lo stato di controllo nelle celle della tabella: possono essere riutilizzati per più righe quando gli scroll di tabella e sarà necessario ripristinare lo stato selezionato in qualche modo ... – Vladimir

+0

Ho anche una matrice che associa le cellule controllato ed in cella per riga in percorso dell'indice verifico se l'accessoryType deve essere controllato o meno –

8

Le righe "selezionate" nell'applicazione Orologio sono celle con tipo di accessorio UITableViewCellAccessoryCheckmark.

Possibili passi per raggiungere, che sono:

  1. deposito controllato/non controllato stato da qualche parte per ogni riga.
  2. In cellForRowAtIndexPath: metodo per cella struttura controllata della cella set fila accessoryType a UITableViewCellAccessoryCheckmark
  3. In cellForRowAtIndexPath: per cella proprietà non controllato di cella impostata fila accessoryType a UITableViewCellAccessoryNone
  4. Quando viene selezionata la cella (filettati) deselezionarla, invertire la sua controllata status e cellule ricarica in quel percorso dell'indice
30

modo più semplice che ho trovato:

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

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

Si può vedere che le cellule sono selezionati chiamando:

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

la vostra risposta è incredibile .. +1, ma ho avuto un piccolo problema .. Come ottenere il valore dal NSArray. Se si potesse si prega di modificare la risposta Grazie – GoCrazy

+1

mi piace la vostra soluzione, ma sembra se seleziono una cellula, più celle vengono selezionate, con un distacco di circa altezza dello schermo. Utilizzerò una matrice per memorizzare lo stato controllato per ogni cella ora. –

11

Gioca con

tableView.allowsMultipleSelection

Questo mi ha salvato ore di guai. Trovato here.

+6

Non è questo 'allowMultipleSelection'? –

+1

Sì, è permessoMultipleSelection, non consenteMultipleAnswersAccepted –

0

Se stai usando Storyboard, fai clic su Vista tabella e poi su Impostazioni attributi nel pannello di destra, imposta la proprietà "selezione" su "Selezione multipla". Ho verificato questo utilizzando Xcode versione 8.2.1.

Problemi correlati