2013-07-29 14 views
19

Come posso passare ad alcune schede in UITabBarController usando StoryBoard? Ho provato il codice qui sotto, ma senza successo (la scheda non è selezionata):Come si imposta la scheda selezionata in UITabBarController usando StoryBoard?

self.tabBar.selectedIndex = 3; 

Onestamente ho usato i file pennino senza StoryBoard e questo codice di cui sopra funzionato bene in

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions 
      :(NSDictionary *)launchOptions 

ma ora posso' t impostare la scheda in modo programmatico. Forse c'è un altro problema che non è collegato alla selezione della scheda. Come posso cambiare le schede?

+1

Quando si dice "senza successo", che cosa esattamente vuoi dire? Errore del compilatore? La scheda non viene selezionata? – Stavash

+0

oh, grazie è un commento molto importante. Sì, la scheda non viene selezionata. –

+0

E riguardo setSelected ... Così così [self.tabBar setSelectedIndex: 3]; – Yanchi

risposta

27

Afferra l'istanza di UITabBarController quindi impostare la proprietà selectedViewController:

yourTabBarController.selectedViewController=[yourTabBarController.viewControllers objectAtIndex:3];//or whichever index you want 
16

Alexander, penso che il problema è sempre istanza corretta della vostra barra delle schede. Se la barra delle schede è il vostro controller della vista di root, allora si può fare come questo nella tua AppDelegate se il metodo didFinishLoading:

UITabBarController *tabBar = (UITabBarController *)self.window.rootViewController; 
    [tabBar setSelectedIndex:3]; 

dargli una prova e mi dica il risultato per favore.

+3

* Commento rapido - 18 mesi dopo se lo converti in Swift nella tua appDelegate come mostrato sopra otterrai il risultato previsto. La traduzione di Swift è: 'let tabBar: UITabBarController = self.window? .rootViewController as! UITabBarController' –

4

Ciò funzionerà in stroryboard troppo ...

[self.tabBarController setSelectedIndex:3]; con questo componente aggiuntivo UITabBarControllerDelegate in .h

e quindi utilizzare questo metodo delegate

- (BOOL)tabBarController:(UITabBarController *)theTabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    return (theTabBarController.selectedViewController != viewController); 
} 
2

È possibile ottenere solo questo utilizzando anche gli storyboard. Ctrl-trascina da tabBarController sul ViewController (s) e seleziona 'Relationship Segue, View controller'. Il primo ViewController selezionato sarà il ViewController di default/iniziale.

8

* Commento rapido - 18 mesi più tardi se convertite la soluzione di Yanchi in Swift nella vostra appDelegate otterrete il risultato previsto. La traduzione Swift è:

let tabBar: UITabBarController = self.window?.rootViewController as! UITabBarController 

tabBar.selectedIndex = 1 
+4

Grazie Space Monkey. Possa la tua nave atterrare in sicurezza. –

+0

Grazie salvato la mia giornata. –

0

È inoltre possibile impostare la scheda predefinita in "User Defined Runtime Attributes" utilizzando storyboard.

Selezionare la scheda controller Bar da storyboard, nel riquadro di destra, selezionare l'ispettore Identità e aggiungere un attributo:

 
Key Path : selectedIndex 
Type  : Number 
Value : 2 (whatever number you want) 
Problemi correlati