2016-04-01 4 views
2

Ich habe 5 Tabs und wenn ich zum Root-Controller popping geht es mich auf die zuletzt verwendete Registerkarte. Gibt es eine Möglichkeit, zu einem bestimmten Tab zu springen?Pop zu Root-Controller, aber zu bestimmten Registerkarte auf dem Tab-Controller

//takes me to last used tab on the tab controller 
@IBAction func goHome(sender: AnyObject) 
{ 
self.navigationController?.popToRootViewControllerAnimated(true) 
} 

zum Beispiel, wenn ich 10 View-Controller geöffnet haben und dann auf den Button oben klicken I 0 bis tabcontroller Index springen möchten, die die Homepage ist

+0

Wenn Sie einen TabController mit so etwas wie 'self.tabBarController.selectedIndex = 1 'mit den ersten Registerkarte auszuwählen, dann könnten Sie die nav-Controller für die jeweiligen Registerkarte und popToRootViewController erhalten. – Lucho

+0

ähnliches Problem .. http://stackoverflow.com/questions/8963450/jump-to-a-specific-tab-in-a-uitabbarcontroller –

Antwort

0

Da dies Swift, möchten Sie vielleicht Sie sicher, dass Sie eine Tab-Leiste Controller als Vorfahren, falls Ihre App Struktur jemals ändert haben: Sie

@IBAction func goHome(sender: UIButton) { 
    self.navigationController?.popToRootViewControllerAnimated(true) 
    if let tab = self.tabBarController { 
     tab.selectedIndex = 0 // Or whichever number you like 
    } 
} 
+0

Dies bringt mich immer noch auf die zuvor verwendete Registerkarte. Der View-Controller im Pop-up von hat nicht den Tab-Controller angezeigt, weshalb ich versuche, zu root und dann wählen Sie die Registerkarte, aber es funktioniert immer noch nicht = ( – swiftTonio

+0

Wenn Ihr aktueller Controller ist nicht Teil des Tab-Controller ist Struktur, wie wurde es angezeigt? (Oder, vielleicht sollte die Frage sein: Wie wurde sein Navigationscontroller angezeigt?) Die Antworten, die Leute gepostet haben, sind alle vernünftig für eine normale Tab/Navigationsstruktur, was ist anders mit dieser? –

+0

im auf einem Navigations-Controller, der zu einem Tab-Controller zu root, aber ich bin nicht in der Lage, den Index nach dem Popping zu root zu wählen Ich bin nicht sicher, was ist anders mit mir im Vergleich zu anderen Menschen – swiftTonio

2

auf die Registerkarte Dieser Code wird übernehmen und für dass Registerkarte in die Wurzel-view-Controller Pop.

func buttonAction(sender: AnyObject){ 
    let someTabIndex = 0 
    // Get the tabBar 
    let t = self.tabBarController 
    // Change the selected tab item to what you want 
    t?.selectedIndex = someTabIndex 
    // Pop the navigation controller of that index 
    let v = t?.viewControllers?[someTabIndex] 
    if let n = v?.navigationController { 
     n.popToRootViewControllerAnimated(true) 
    } 

} 
+0

Wenn Sie 'popToRootViewController (anim ated: false) ', müssen Sie diesen Navigationscontroller zuerst ausblenden. Also sollte "t? .selectedIndex = i" früher aufgerufen werden als pop, genau wie im Dokument von Apple über 'popToRootViewController (animated:) 'beschrieben –

0
func goToRootOfTab(index: Int) { 
    let window = (UIApplication.shared.delegate as? AppDelegate)?.window 
    let tabBar :UITabBarController? = window?.rootViewController as? UITabBarController 
    tabBar?.selectedIndex = index 
    // pop to root if navigated before 
    if let nav = tabBar?.viewControllers?[index] as? UINavigationController { 
     nav.popToRootViewController(animated: true) 
    } 
} 
Verwandte Themen