2012-10-30 4 views
37

Qualcuno può dirmi come impostare la scheda predefinita quando si utilizzano gli storyboard in iOS. Non riesco a capire come realizzare questo.Impostazione della scheda predefinita quando si utilizzano gli storyboard

Grazie

+0

cosa intendete per scheda predefinita? Stai usando tabBarController e stai provando a selezionare la prima scheda quando l'app si avvia ?? –

+0

assicurati che la tua domanda sia descrittiva e migliora anche la tua tariffa accettata. –

+0

Ho creato un'applicazione a schede usando gli story board e voglio impostarlo in modo che la seconda scheda venga selezionata all'avvio dell'app. – user1145581

risposta

8

È possibile utilizzare uno di questi due metodi:

tabBar.items = tabBarItems; 
tabBar.selectedItem = [tabBarItems objectAtIndex:0]; 

o un metodo diretto dall'oggetto

[tabBar setSelectedItem:myUITabBarItem]; 

oppure è possibile combinarli per fare questo:

tabBar.items = tabBarItems; 
[tabBar setSelectedItem:[tabBarItems objectAtIndex:0]]; 

ma non ho ancora provato questo metodo, spero che questo aiuti!

+0

Come posso creare la proprietà di uscita per il controller Tabbar? Per favore fatemi sapere come sono nuovo allo storyboard –

+0

sì, io personalmente faccio schifo a story board, posso mandarvi del codice se volete? –

+0

fammi provare a trovare il codice esatto e metterlo su pastebin, altrimenti lo comprimo e lo metto sul mio sito web –

21

Il seguente codice ha funzionato per me:

UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
tabBarController.selectedIndex = 2; 
+0

Questo codice presuppone che rootViewController sia tabBarController. Quale potrebbe non essere sempre vero. – oyalhi

24
  1. Creare un nuovo file di sottoclasse di UITabBarController;
  2. Aggiungere questo alla fine del viewDidLoad:

    self.selectedIndex = 1;

  3. Impostare questo nuovo file come la classe personalizzata nella UITabBarController del vostro Storyboard.

Il gioco è fatto.

+0

Great Solution ha funzionato perfettamente! – sabir

94

Mentre è possibile impostare la scheda iniziale selezionata a livello di codice come le altre risposte, per ottenere lo stesso nel vostro storyboard senza toccare il codice che si eseguire le seguenti operazioni:

  1. Selezionare il tab bar controller nello Storyboard Interface
  2. Mostra l'ispettore di identità nel pannello Utilità
  3. Aggiungi un nuovo "User Defined Attribute Runtime"
  4. Impostare il percorso della chiave a "selectedIndex"
  5. impostare il tipo a "Numero"
  6. impostare il valore l'indice della scheda che si desidera selezionare (un valore di 1 avrebbe selezionare la seconda scheda per esempio)
  7. Salva Storyboard, costruire e gestire l'applicazione

Questo dovrebbe essere quello che sembra quando hai raggiunto i passaggi precedenti:

+1

Non funziona in Xcode 6.3, iOS 8. – friedbunny

+0

Questo funziona ancora per me su Xcode 6.3.1, iOS 8.3 - ulteriori dettagli sul problema che stai riscontrando in Jason? –

+0

Probabilmente stranezze sulla mia estremità in quel caso; è un crash a '_NSSetUsingKeyValueSetter': http://pastie.org/10185899 – friedbunny

50

potrebbe sembrare eccessivo per alcuni a sottoclasse UITabBarController, ma, penso che fornisce le s più puliti oluzione.

  1. Creare BaseTabBarController.swift
  2. Aggiungi un @IBInspectable e metterlo in viewDidLoad:

    class BaseTabBarController: UITabBarController { 
    
        @IBInspectable var defaultIndex: Int = 0 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
         selectedIndex = defaultIndex 
        } 
    
    } 
    
  3. Nel storyboard, regolerà UITabBarController di essere la tua nuova sottoclasse:

enter image description here

  1. Vai Attributi aggiunge impostare la nuova proprietà Indice predefinito:

enter image description here

  1. ta -da! (:.
+0

In realtà una fantastica soluzione per la riutilizzabilità, e abbastanza flessibile ancora da consentirne la gestione in codice se necessario. – brandonscript

+0

Soluzione fantastica @Aviel. Grazie. – iamyogish

+0

Annnd BOOM! Ecco la dinamite - ha funzionato (Xcode 7.3.1). Grazie – Jeeves

1

in AppDelegate trovare applicationDidBecomeActive funzione e aggiungi a linee

let tabBarController = self.window?.rootViewController as! UITabBarController 
tabBarController.selectedIndex = 0 // any index you want 
+0

Come fai a sapere che rootViewController è sempre il tabBarController? – oyalhi

+0

Quando utilizziamo la barra delle schede, per impostazione predefinita tabBarController è rootViewController. A meno che non sia stato modificato rootViewController dopo initiallization – zizutg

2

Nel viewDidLoad() del TabBarController, impostare selectedIndex a quello che vuoi (0 sarebbe la prima, 3 sarebbe la quarta , ecc.)

1

È possibile ottenere ciò tramite Xcode 8 o successivo (è sufficiente testarlo e non si sa se è disponibile prima di questa versione)

fare i passi, come ha detto Finch @Joshua ma:

  1. Selezionare la voce della barra al posto del TabBar
  2. Got a "User Defined Attribute Runtime"
  3. Aggiungi nuova chiave
  4. nome "selezionato "
  5. impostare il tipo di booleano e scegliere il vero/o controllare la casella di controllo
+0

"xcode 8 o prima": intendevi veramente "prima"? Sembra contraddire la seguente frase, "non so se è disponibile prima di questa versione". Forse intendevi "8 o maggiore"? –

0

Basandosi sulle Aviel Gross' risposta, io j abbiamo voluto implementarlo per un UITabBar, al contrario di un UITabBarController. Questo può essere fatto come segue:

class BaseTabBar: UITabBar { 

    @IBInspectable var defaultIndex: Int = 0 { 
     didSet { 
      self.selectedItem = self.items?[defaultIndex] 
     } 
    } 
}