Come posso ottenere il ViewController da TabBarController in AppDelegate?

Io uso iOS5 storyboard, e la mia iniziale view controller è TabBarController, ci sono quattro relazioni di view1 & view2 & view3 & view4, così, come posso ottenere il view3 del view controller?

Ho provato:

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

Ma non funziona…



5 Replies
  1. 31

    È detto che la tua iniziale (root) view controller è un UITabBarController ma si fa riferimento a un view controller con un controller di navigazione con tab bar controller. Si sono sempre mescolati nel tuo controller di visualizzazione della gerarchia?

    edit:

    se il root view controller è in realtà solo una tab bar controller e si desidera ottenere il 3 ° scheda è qui il codice:

    [[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2];
    • Non visibile @interfaccia per ‘UIViewController’ dichiara il selettore ‘viewControllers’
    • sì, funziona. Io sono così stupido. UITabBarController *tabBarController = (UITabBarController *)self.finestra.rootViewController;
  2. 9
    [self.tabBarController setSelectedIndex:2];
    • Mentre la minima risposta mai, questo è il più semplice e il modo migliore per ottenere il tabBarController. UITabBarController aggiunge una categoria di UIViewController che restituisce un UITabBarController se la vista è in uno, o NULL se non è così.
    • C’è un modo per ottenere l’oggetto(view controller) in un indice selezionato?
  3. 7

    Provare in questo modo

    In qualsiasi controller di visualizzazione

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

    questo ritorno che il controller di visualizzazione dell’oggetto.Il Cast per il view controller e sono pronti per l’uso che.
    correre e Andare

    • Che cosa sarebbe la Swift 3 versione di questa risposta?
  4. 3
       UIViewController *loginViewController=self.window.rootViewController;
    
       UITabBarController *controller=loginViewController.tabBarControllerObj;
    
       UIViewController *selectedController=controller.selectedViewController;

    Da questo si ottengono selezionato view controller.

    Per ottenere tutti i controller di visualizzazione basta sostituire

    NSArray *viewControllers = [controller viewControllers];
  5. 1

    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 Visibile ViewController

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

Lascia un commento