2012-05-21 15 views
11

Io uso lo storyboard iOS5 e il controller di visualizzazione iniziale è TabBarController, ci sono quattro relazioni da visualizzare1 & view2 & view3 & view4, quindi, come posso ottenere il controller di visualizzazione di view3?Come posso ottenere ViewController da TabBarController su AppDelegate?

ho provato:

[[[[self.window.rootViewController navigationController] tabBarController] viewControllers] objectAtIndex:2]; 

Ma non funziona ...

risposta

30

Lei ha detto che il vostro (root) di controllo iniziale vista è un UITabBarController ma si fa riferimento a un controller di vista con un controller di navigazione con un controller barra delle linguette. Ti stai confondendo nella gerarchia del tuo controller di visualizzazione?

edit:

se il controller di vista principale è in realtà solo un controller scheda bar e si desidera ottenere la scheda 3 ° ecco il codice:

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

No @interface visibile per 'UIViewController' dichiara il selettore 'viewControllers' –

+2

sì, funziona. Sono così stupido. UITabBarController * tabBarController = (UITabBarController *) self.window.rootViewController; –

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

Mentre la risposta più minimale di sempre, questo è il modo più semplice e migliore per ottenere tabBarController. UITabBarController aggiunge una categoria a UIViewController che restituisce un UITabBarController se la vista è in uno, o NULL se non lo è. –

+1

C'è un modo per ottenere l'oggetto (controller vista) in un indice selezionato? –

7

provare in questo modo

In ogni controllore vista

YourViewController *yourViewController= (YourViewController*) [self.tabBarController.viewControllers objectAtIndex:3]; 

restituisce l'oggetto del controller di visualizzazione. Passa al controller di visualizzazione e sei pronto per utilizzarlo. run and Go

+0

Quale sarebbe la versione Swift 3 di questa risposta? –

3
UIViewController *loginViewController=self.window.rootViewController; 

    UITabBarController *controller=loginViewController.tabBarControllerObj; 

    UIViewController *selectedController=controller.selectedViewController; 

Da questo avrete selezionato View Controller.

Per ottenere tutti i controller di vista semplicemente sostituire

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 

Inoltre è possibile controllare il ViewController Visibile

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