12

Ci scusiamo per la domanda per principianti. Ho un UITabBar nella mia finestra principale e un array di UINavigationControllers per ogni Tab. La struttura è simile all'app iPod in quanto è possibile visualizzare le viste principali selezionando gli elementi TabBar e quindi l'utente può eseguire il drill down ulteriormente con NavigationController spingendo le visualizzazioni in pila.Programmazione premendo un pulsante UITabBar in Xcode

Quello che vorrei essere in grado di fare è quello di fare l'equivalente di premere un pulsante TabBar in fondo da una qualsiasi delle sottoview nel codice (ad esempio, modificare la proprietà selezionata del TabBar e visualizzare lanciare il primo controller di visualizzazione per la scheda).

Qualsiasi aiuto sarebbe molto apprezzato.

Dave

risposta

23
[myTabBarController setSelectedIndex:index] 

EDIT: Rispondendo alla domanda parte 2 dal commento:

È possibile definire un metodo in AppDelegate per passare a una scheda diversa.

E si può entrare in possesso di AppDelegate da qualsiasi luogo e inviare un messaggio .. qualcosa di simile:

MyAppDelegate *appDelegate = (MyAppDelegate*) [[UIApplication sharedApplication] delegate]; 
[appDelegate SwitchToTab:index] 
+0

Per me, impostare chiamando il metodo Tabbarcontroller sembra corretto! Ma controllerà che non importa! – prakash

+0

Sì, forse hai ragione - ho preso una parte del mio codice dove ho usato TabBar senza tabbarcontroller – Vladimir

+0

Questo è fantastico grazie. OK, domanda stupida parte 2. Come posso ottenere l'oggetto root dal mio codice? Il TabBar effettivo è impostato nel codice dal controller di visualizzazione radice. Voglio essere in grado di impostare la proprietà del TabBar ma da un altro controller di visualizzazione che è stato inserito nello stack. Lo sto spiegando abbastanza bene. È come se avessi bisogno di un equivalente di sé, ma per l'oggetto genitore in cima all'albero. Ancora dispiaciuto per la nuova domanda, mi manca qualcosa di assolutamente fondamentale nel mio pensiero, credo. –

11

in alternativa ...

[self.parentViewController.tabBarController setSelectedIndex:3]; 
3

mi piacerebbe rispondere a Prakash, ma non riesco a capire come. Forse sono bloccato fino a quando il mio punteggio sale.

In ogni caso, spero che questo aiuta qualcuno:

stavo facendo quello che ha detto Prakash, e nulla stesse accadendo. È perché per ottenere un puntatore alla mia app delegato, stavo facendo questo:

AppDelegate_Phone *appDelegate = [[AppDelegate_Phone alloc] init]; 

Quando mi avrebbe dovuto essere facendo questo:

AppDelegate_Phone *appDelegate = (AppDelegate_Phone *) [[UIApplication sharedApplication] delegate]; 

Newbie errore.

0

Per questo, Hai solo bisogno di prendere UITabBar regolatore -

.h File -

UITabBarController *_pTabBarController; 
@property (nonatomic, retain) IBOutlet UITabBarController *_pTabBarController; 

.m File - 
// synthesize it 
@synthesize _pTabBarController;  

At initial load 

// You can write one function to add tabBar - 

// As you have already mentioned you have created an array , if not 

_pTabBarController = [[UITabBarController alloc] init]; 
    NSMutableArray *localViewControllersArray = [[NSMutableArray alloc] initWithCapacity:4]; 
    UINavigationController *theNavigationController; 

    _pController = [[Controller alloc] initStart]; 
    _pController.tabBarItem.tag = 1; 
    _pController.title = @"Baranches"; 
    theNavigationController = [[UINavigationController alloc] initWithRootViewController:_pController]; 
    theNavigationController.tabBarItem.tag = 1; 
    theNavigationController.tabBarItem.image = [UIImage imageNamed:@"icon_branches.png"]; 
    [localViewControllersArray addObject:theNavigationController]; 
    [theNavigationController release]; 

di quanto si può impostare indice secondo i vostri bisogni

self._pTabBarController.selectedIndex = 0; // as per your requirements 
0
[self.parentViewController.tabBarController setSelectedIndex:3]; 

selezionati l'indice per me, ma ha appena evidenziato l'indice del navigatore come indice attivo, ma mentre ha evidenziato che i ndex era in realtà su un diverso viewcontroller di quanto suggerito dall'elemento tabbarmenu.

Volevo solo aggiungere che l'ho usato dal mio controller di visualizzazione, e si è comportato come se qualcuno avesse effettivamente premuto il menu; dal codice:

UITabBarController *MyTabController = (UITabBarController *)((AppDelegate*) [[UIApplication sharedApplication] delegate]).window.rootViewController; 
[MyTabController setSelectedIndex:1]; 

Grazie per questo post/risposte mi ha aiutato molto nel mio progetto.

0

Volevo fare qualcosa di simile ma per XCode 6.4 iOS (8.4) setSelectedIndex da solo non lo farà.

aggiungere la vista controllori della barra delle schede per un elenco e quindi usare qualcosa come quanto segue in qualche funzione e poi chiamarlo:

FirstViewController *firstVC = [[self viewControllers] objectAtIndex:0]; 
[self.selectedViewController.view removeFromSuperview] 
[self.view insertSubview:firstVC.view belowSubview:self.tabBar]; 
[self.tabBar setSelectedItem:self.firstTabBarItem]; 
self.selectedViewController = firstVC; 

Si potrebbe avere un codice simile già all'interno del vostro didSelectedItem ..

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { 

    if (item == self.firstTabBarItem) 
     // Right here 
    } 
    else if ... 
} 
Problemi correlati