2012-05-21 15 views

Antwort

30

Sie sagten, dass Ihre erste (root) View-Controller ein UITabBarController ist aber, Sie beziehen sich auf einen View-Controller mit einem Navigationscontroller mit einem Tab-Bar-Controller. Werden Sie in Ihrer View-Controller-Hierarchie durcheinander gebracht?

edit:

wenn Ihr Root-View-Controller eigentlich nur eine Registerkarte Bar Controller ist, und Sie möchten hier die 3. Registerkarte erhalten, ist der Code:

[[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2]; 
+0

Keine sichtbaren @interface für 'UIViewController' die erklärt Selektor 'viewControllers' –

+2

ja, es funktioniert. Ich bin so dumm. UITabBarController * tabBarController = (UITabBarController *) self.window.rootViewController; –

9
[self.tabBarController setSelectedIndex:2]; 
+2

Während die minimalste Antwort jemals, ist dies der einfachste und beste Weg, um den tabBarController zu bekommen. UITabBarController fügt UIViewController eine Kategorie hinzu, die einen UITabBarController zurückgibt, wenn die Ansicht in eins ist, oder NULL, wenn dies nicht der Fall ist. –

+1

Gibt es eine Möglichkeit, das Objekt (View Controller) auf einen ausgewählten Index zu bekommen? –

7

auf diese Weise versuchen

In jeder Ansicht Controller

Dies gibt Ihr View-Controller-Objekt zurück. Schließen Sie es an Ihren View-Controller an, und Sie können es verwenden. Lauf und gehen

+0

Was wäre die Swift 3-Version dieser Antwort? –

3
UIViewController *loginViewController=self.window.rootViewController; 

    UITabBarController *controller=loginViewController.tabBarControllerObj; 

    UIViewController *selectedController=controller.selectedViewController; 

Von diesem werden Sie View-Controller erhalten ausgewählt.

Für alle View-Controller immer ersetzen Sie einfach

NSArray *viewControllers = [controller viewControllers]; 
0

Swift 4,0

let viewC = self?.tabBarController.viewControllers.first // will give single Navigation Controller on index 0 
let viewC = self?.tabBarController?.viewControllers// will give array of Navigation Controller 

Weiter können Sie die Visible-Viewcontroller überprüfen

if let nav = viewC as? UINavigationController { 
    if nav.visibleViewController is YourViewControllerName{ 
     // Do Code 
    } 
} 
Verwandte Themen