2013-02-17 1 views
7

ho spesso bisogno di impostare vista tavolo cellule ad uno stato selezionato iniziale per cui io uso il seguente codice:Selezionare una cella di vista della tabella di programmazione: selectRowAtIndexPath vs setSelected

[self.tableView selectRowAtIndexPath:indexPath 
    animated:NO scrollPosition:UITableViewScrollPositionNone]; 
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
[cell setSelected:YES]; 
cell.accessoryType = UITableViewCellAccessoryCheckmark; 

Sto usando selectRowAtIndexPath:indexPath e setSelected:YES allo stesso tempo, perché non comprendo appieno quale dei due modi sia il modo preferito per selezionare una cella a livello di programmazione.

Quale delle frasi dovrei usare e perché?

risposta

6

Credo che il metodo che si desidera utilizzare sia selectRowAtIndexPath:animated:scrollPosition:. In genere, è necessario lasciare la gestione dello stato della cella nella vista tabella. In caso di selezione, memorizza e mantiene una serie di percorsi indice selezionati, quindi la riga corretta rimarrà selezionata dopo che una cella diversa viene riutilizzata per essa. Inoltre, non è necessario chiamare entrambi i metodi, è semplicemente ridondante.

+0

Grazie, @Nicky! Dopo aver usato 'selectRowAtIndexPath: animated: scrollPosition:' Vorrei ricaricare la tabella e impostare il segno di spunta in 'cellForRowAtIndexPath' a seconda dello stato di selezione della cella (' isSelected')? – AlexR

+0

Bene, di solito memorizzo l'elemento con segno di spunta in una proprietà separata, sembra più esplicito. Quindi, in 'tableView: didSelectRowAtIndexPath:' fai quanto segue: ricarica due righe, quella precedentemente spuntata e l'utente cliccato (senza animazione), seleziona la riga cliccata (anche senza animazione), quindi deseleziona l'animazione in modo da ottenere un bell'effetto visivo Tutto fatto chiamando i metodi della vista tabella. – Nicky

+0

È necessaria una selezione aggiuntiva perché la cella la perderà dopo essere stata ricaricata. Si può semplicemente impostare il tipo di accessorio lì e stare bene senza ricaricare/selezionare, anche se preferisco non duplicare alcuna parte della logica di configurazione della cella. Chissà, forse domani userò fantasiosi segni di spunta personalizzati o qualche altra roba pazzesca :) – Nicky