2013-10-31 6 views
7

Ho appena iniziato a lavorare con tableViews e ho 5 celle in una tableview in una viewController incorporata in un navigationController. Quando una cella viene premuta, viene spinto un'altra vista. Il mio problema è che la cella che premo è selezionata ma la selezione non scompare. Ho provato con questo codice:deselectRowAtIndexPath problema

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
[self.tableView deselectRowAtIndexPath:indexPath animated:NO]; 

NewViewController *newViewController = [[NewViewController alloc] init]; 

newViewController.theTitle = [self.tableView cellForRowAtIndexPath:indexPath].textLabel.text; 

[self.navigationController pushViewController: newViewController animated:YES]; 

} 

Il TableView è inizializzato nel metodo viewDidLoad.

Ancora quando faccio clic su una cella viene spinto il nuovo viewController ma la cella rimane selezionata. Quale potrebbe essere il problema qui?

+0

Non dimenticare di accettare la risposta che ti ha aiutato. – rmaddy

risposta

33

Hai inserito il tuo codice in didDeselectRowAtIndexPath - inseriscilo in didSelectRowAtIndexPath. Questo è un errore facile da fare dato che didDeselect si presenta in completamento del codice prima di didelect.

+1

ah un errore così stupido, grazie! –

+1

Ouch ... mi ci sono voluti 30 minuti, grazie per averlo risolto :-) – Pieter

+0

@Pieter Beh, non è come un intervento chirurgico al cervello, ma di solito sono le piccole cose che possono causare più dolore - sono felice di poter aiutare! – Steve

1

Penso che il tuo problema sia che usi un metodo sbagliato. Modifica didDeselectRowAtIndexPath a didSelectRowAtIndexPath.

2

Hai implementato anche tableView:didSelectRowAtIndexPath:? Questo metodo viene chiamato ogni volta che tocchi una cella. Quindi dovresti mettere il tuo codice lì.

Il metodo che si sta utilizzando, tableView:didDeselectRowAtIndexPath: viene chiamato ogni volta che viene selezionata una cella e si sta toccando una cella diversa.

3

Sommario:

  • Hai Tableview che si trova in un ViewController che è in un navigationController
  • Usa toccare una cella
  • Un nuovo ViewController è spinta sul navigationController Stack
  • utente premete e tornate allo schermo dove avete un tavoloView

Questo è ciò che capisco dalla tua domanda.
In questo momento la cella nella tabellaView dovrebbe essere ancora selezionata in modo che l'utente possa avere un promemoria dell'ultima azione che ha eseguito, ma si desidera anche che si ottenga animato non selezionato nel punto (l'applicazione di posta è buona esempio di questo comportamento).

Così il posto migliore per deselezionare la cella nella tua tableView è in- (void)viewDidAppear:(BOOL)animated metodo della UIViewController che hanno la Tableview all'interno è vista. Facendo così, lascerai all'utente la possibilità di vedere la selezione prima che svanisca dolcemente come nella posta.

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:animated]; 
} 

È possibile passare nil come argomento di deselectRowAtIndexPath, tableView gestisce con garbo.