2014-10-23 18 views
6

Ho un controller di visualizzazione tabella e toccando una cella è possibile attivare uno dei molti diversi tipi di push segues in base al tipo di dati nella cella. L'identificatore del seguito corretto viene determinato in tableView: didSelectRowAtIndexPath: quindi il seguito viene attivato con self.performSegueWithIdentifier:Xcode 6 - Passa allo stesso controller di visualizzazione

Per uno di questi passaggi, mi piacerebbe inserire un'altra istanza dello stesso controller di visualizzazione sul pila di navigazione. È possibile farlo senza dover trascinare sullo storyboard un nuovo oggetto controller di visualizzazione dello stesso tipo? Finora, sono stato in grado di collegare un seguito allo stesso controller di visualizzazione se I Ctrl + Trascina dalla cella della tabella al controller della vista. Questo non è quello che voglio.

+1

possibile duplicato del [Storyboard Segue Da Vedere Controller per sé] (http://stackoverflow.com/questions/9226983/storyboard-segue-from-view-controller-to-itself) –

+2

Non utilizzare un seguito. Crea un'istanza di una nuova istanza e inseriscila o inseriscila nel codice. Non penso che ci sia un modo per vedere il seguito (una linea che va dal controller allo stesso controller) comunque, quindi non c'è alcun reale vantaggio nell'usare un seguito. – rdelmar

+0

Ho accettato la risposta di Tatonka in quanto è una soluzione valida per il mio problema. Grazie per il collegamento all'altra domanda. Ho visto alcune risposte davvero interessanti, in particolare questa in quanto risponde esattamente a ciò di cui avevo bisogno: http://stackoverflow.com/questions/9226983/storyboard-segue-from-view-controller-to-itself#answer-16247976 –

risposta

10

Come suggerito, non credo che un seguito funzionerà. Invece è possibile spingere una nuova istanza dello stesso controller di visualizzazione a livello di codice, che avrà lo stesso effetto di eseguire il seguito. La differenza è che non verranno chiamati metodi di delegate successivi come prepareForSegue.

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    MyViewController *vc = [[MyViewController alloc] init]; 
    [self.navigationController pushViewController:vc animated:YES]; 
} 
+10

che è 'MyViewController * vc = [self.storyboard instantiateViewControllerWithIdentifier: @" moneyVC "];' quindi fare '[self.navigationController pushViewController: vc animated: YES];' –

0

risposta offrendo tutti sopra di voi può fare questo a Swift 3 utilizzando:

let vc = ViewController()   
self.navigationController?.show(vc, sender: nil) 

Se si utilizza storyboard è possibile utilizzare questo:

let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewControllerID") as! YourViewController 
self.navigationController?.show(vc, sender: nil) 
Problemi correlati