2014-10-23 14 views
6

Mam kontroler widoku tabeli, a stuknięcie w komórkę może wyzwalać jeden z wielu różnych typów selektorów typu "push" w zależności od typu danych w komórce. Identyfikator poprawnej segue jest określona w Tableview: didSelectRowAtIndexPath a następnie segue jest wyzwalany z self.performSegueWithIdentifier:Xcode 6 - Przesunięcie do tego samego kontrolera widoku

Dla jednego z tych segues chciałbym naciskać kolejne wystąpienie tego samego kontrolera do widoku na stos nawigacyjny. Czy jest to możliwe bez konieczności przeciągania nowego obiektu kontrolera widoku tego samego typu na scenorys? Do tej pory mogłem tylko podłączyć do tego samego kontrolera widoku, gdybym Ctrl + przeciągnij z komórki tabeli do kontrolera widoku. Nie tego chcę.

+1

możliwe duplikat [Storyboard Segue z widoku Kontroler do siebie] (http://stackoverflow.com/questions/9226983/storyboard-segue-from-view-controller-toself) –

+2

Nie używaj segue. Utwórz instancję nowej instancji i wypchnij lub zaprezentuj ją w kodzie. Nie sądzę, że istnieje sposób, aby zobaczyć przejście (linia przechodząca od kontrolera z powrotem do tego samego kontrolera), tak więc nie ma prawdziwej przewagi w korzystaniu z segue. – rdelmar

+0

Przyjąłem odpowiedź Tatonki poniżej, ponieważ jest to prawidłowe rozwiązanie mojego problemu. Dziękuję za link do drugiego pytania. Zobaczyłem kilka naprawdę interesujących odpowiedzi, szczególnie tę, która odpowiada dokładnie na to, czego potrzebowałem: http://stackoverflow.com/questions/9226983/storyboard-segue-from-view-controller-to-self-ansself-16247976 –

Odpowiedz

10

Zgodnie z sugestią, nie sądzę, żeby segue działało. Zamiast tego można programowo wprowadzić nową instancję tego samego kontrolera widoku, co będzie miało taki sam efekt jak wykonanie przejścia. Różnica polega na tym, że metody delegowania typu przeniesienia, takie jak prepareForSegue, nie będą wywoływane.

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

To jest 'MyViewController * vc = [self.storyboard instantiateViewControllerWithIdentifier: @" moneyVC "];' następnie wykonaj '[self.navigationController pushViewController: vc animowany: YES];' –

0

Complemeting odpowiedź powyżej można to zrobić w Swift 3 przy użyciu:

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

Jeśli używasz storyboard można użyć to:

let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewControllerID") as! YourViewController 
self.navigationController?.show(vc, sender: nil) 
Powiązane problemy