Come indicato nelle risposte precedenti, è necessario deselezionare esplicitamente la riga. Hai due opzioni su come farlo. Il primo, è per deselezionare riga immediatamente dopo la selezione:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
...
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
che funzionano bene, ma c'è un'alternativa, e la sua l'approccio adottato dal UITableViewController
che deve lasciare la riga selezionata quindi deselezionate quando la la visualizzazione riappare (dopo che il controller che stai spingendo viene estratto dalla pila).
Questo ha il leggero vantaggio che l'utente vede un'anteprima della loro precedente selezione al loro ritorno in modo da poter vedere ciò che avevano precedentemente selezionato.
Per implementare questo, basta eseguire l'override viewWillAppear
:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];
}
Come ho detto, questo è ciò che il default di attuazione del UITableViewController
s' viewWillAppear:
lo fa se si utilizza UITableViewController
e non vedere questo comportamento, è necessario verificare che si stia chiamando l'implementazione super
nella propria classe viewDidAppear:
.
Aggiornamento (30 ott 2013): beh, questa è una risposta popolare! Come Ben giustamente fa notare nei commenti, UITableViewController fa questo in viewWillAppear:
non viewDidAppear:
- questo è il momento giusto. Inoltre, si attiva e disattiva questo comportamento utilizzando la proprietà clearsSelectionOnViewWillAppear
di UITableViewController. Ho modificato la mia risposta sopra per riflettere questo.
fonte
2010-05-10 20:05:17
veramente bello. Grazie per questo. – ToddB
@Luke Redpath awesome ... Grazie – death7eater
Questa è un'ottima risposta, ma suggerirei di posizionarla in 'viewWillAppear' per simulare accuratamente i tempi della deselezione di UITableViewController. –