2012-02-18 14 views
9

Sto tentando di utilizzare uno storyboard/seguito per gestire la transizione tra un UITableView con entrambi i pulsanti di transizione standard e dettaglio. Dopo aver letto qualche post differenti su qui Ho creato il mio progetto in questo modo:IndexPath per i passaggi dall'accessorioButton

  1. Tie segue principale tra UITableViewCell e ViewController
  2. Tie segue secondaria da ViewController genitore a nuova ViewController
  3. Implementare accessoryButtonTappedForRowWithIndexPath come segue :

    -(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath { 
        [self performSegueWithIdentifier:@"DetailSegue" sender:self]; 
    } 
    

Questa grande opera e la mia prepareForSegue: sender: ottiene c allocato come previsto. Il problema è che ho bisogno di conoscere indexPath per l'elemento selezionato. La segue dal UITableViewCell recupera l'indexPath in questo modo:

NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 

Purtroppo quando cerco di farlo dopo aver chiamato l'accessoryButton, che restituisce null.

La domanda originale sto basando parte di questo codice fuori di qui è: Detail Disclosure Button and Segues

Esiste un metodo del tableView che restituisce indexPath per accessoryButtons? Devo accedere a indexPath in qualche altro modo?

risposta

16

Non devi ignorare accessoryButtonTappedForRowWithIndexPath.

In prepareForSegue, quando si lavora con un pulsante dettaglio divulgazione, anziché:

[self.tableView indexPathForSelectedRow] 

uso:

[self.tableView indexPathForCell:sender] 

Il mittente è già cellule del pulsante divulgazione dettaglio.

+2

Grazie Adam, questa dovrebbe essere la risposta accettata! – Pat

+0

Quando ho fatto questo, il mittente era il TableViewController in cui mi trovavo. Quindi in performSegue, ho passato la cella come mittente –

+0

come lo facciamo in Swift 3? – nyxee

13

L'argomento sender è, secondo la documentazione:

L'oggetto che si desidera utilizzare per avviare la segue. Questo oggetto è reso disponibile per scopi informativi durante i passaggi effettivi.

non vedo alcuna ragione per cui non è possibile utilizzare il percorso indice come il mittente, invece di self, quindi accedere al percorso indice in prepareForSegue:.

Se questo non funziona, memorizzare il percorso indice in un Ivar e accedere a quella in prepareForSegue

+0

Passare indexPath mentre il mittente funziona correttamente. Sembra abbastanza ovvio quando qualcuno lo menziona. Grazie. – valdarin

+0

Ottima idea, sono stato disturbato nel pensare che potremmo aver bisogno di una variabile locale solo per passare queste informazioni attraverso – trapper

Problemi correlati