2012-10-30 12 views
37

Czy ktoś może mi powiedzieć, jak ustawić domyślną kartę podczas używania scenorysów w systemie iOS. Nie potrafię wymyślić, jak to osiągnąć.Ustawianie domyślnej zakładki podczas korzystania ze scenorysów

Dziękuję

+0

co masz na myśli domyślnie tab? Czy używasz tabBarController i próbujesz wybrać pierwszą kartę po uruchomieniu aplikacji? –

+0

Upewnij się, że twoje pytanie ma charakter opisowy i popraw swój zaakceptowany kurs. –

+0

Stworzyłem aplikację z kartami, używając tablic ogłoszeń i chcę ustawić ją tak, aby druga karta była wybierana podczas uruchamiania aplikacji. – user1145581

Odpowiedz

8

Można użyć jednej z tych dwóch metod:

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

lub bezpośredni sposób z obiektu

[tabBar setSelectedItem:myUITabBarItem]; 

lub można je połączyć, aby to zrobić:

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

ale nie testowałem jeszcze tej metody, mam nadzieję, że to pomoże!

+0

Jak mogę utworzyć właściwość wyjściową dla kontrolera karty? Proszę dać mi znać, ponieważ jestem nowy w storybooku –

+0

tak, osobiście zasysam na story boarding, mogę wysłać ci kod, jeśli chcesz? –

+0

Pozwól mi spróbować znaleźć dokładny kod i umieścić go na pastebin, w przeciwnym razie źle zip to i na mojej stronie internetowej –

21

Poniższy kod pracował dla mnie:

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

Ten kod zakłada, że ​​rootViewController to tabBarController. Co nie zawsze musi być prawdą. – oyalhi

24
  1. utworzyć nowy plik podklasę UITabBarController;
  2. Dodaj to pod koniec viewDidLoad:

    self.selectedIndex = 1;

  3. ustawić ten nowy plik jako niestandardową klasę w UITabBarController swojej Storyboard.

Skończyłeś.

+0

Świetne rozwiązanie działa idealnie! – sabir

94

Chociaż można ustawić początkowy wybraną kartę programowo jak inne odpowiedzi, aby osiągnąć to samo w serii ujęć bez kodu dotykając byś wykonać następujące czynności:

  1. Wybierz zakładkę Bar Controller w Storyboard interfejsu
  2. Pokaż Identity Inspector w panelu Narzędzia
  3. Dodaj nową "User Defined Runtime atrybut"
  4. Ustaw ścieżkę do klucza "selectedIndex"
  5. Ustaw typ na „Number”
  6. ustawić wartość indeksu na karcie, którą chcesz wybrać (wartość 1 by wybrać drugą kartę na przykład)
  7. zapisać Storyboard, zbudować i uruchomić aplikację

to powinno być, jak to wygląda, kiedy już osiągnąć powyższe kroki:

+1

To się nie powiedzie w Xcode 6.3, iOS 8. – friedbunny

+0

To nadal działa dla mnie na Xcode 6.3.1, iOS 8.3 - jakiekolwiek dalsze szczegóły dotyczące problemu, który masz Jason? –

+0

Prawdopodobnie dziwactwo na moim końcu w tej sprawie; to jest awaria w '_NSSetUsingKeyValueSetter': http://pastie.org/10185899 – friedbunny

50

może wydawać się przesadą niektóre podklasy UITabBarController, ale myślę, że zapewnia najczystsze s olution.

  1. Tworzenie BaseTabBarController.swift
  2. Dodaj @IBInspectable i ustawić go w viewDidLoad:

    class BaseTabBarController: UITabBarController { 
    
        @IBInspectable var defaultIndex: Int = 0 
    
        override func viewDidLoad() { 
         super.viewDidLoad() 
         selectedIndex = defaultIndex 
        } 
    
    } 
    
  3. W serii ujęć, ustaw Ci UITabBarController być twoja nowa podklasa:

enter image description here

  1. Przejdź do Atrybuty Inspector dodaj ustawić nową nieruchomość domyślny indeks:

enter image description here

  1. TA -da! (:.
+0

Właściwie to fantastyczne rozwiązanie do ponownego wykorzystania i wystarczająco elastyczne, aby umożliwić zarządzanie kodem, jeśli jest to wymagane. – brandonscript

+0

Fantastyczne rozwiązanie @Aiel. Dziękuję Ci. – iamyogish

+0

Annnd BOOM! Nie ma dynamitu - zadziałało (Xcode 7.3.1). Dzięki – Jeeves

1

w appdelegate znaleźć applicationDidBecomeActive funkcji i dodać ten linie

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

Skąd wiesz, że rootViewController jest zawsze tabBarController? – oyalhi

+0

Kiedy używamy paska kart, domyślnie tabBarController jest rootViewController. O ile nie zmieniło się rootViewController po inicjalizacji – zizutg

2

W viewDidLoad() z TabBarController ustaw selectedIndex aby cokolwiek chcesz (0 byłby pierwszym, 3 byłby czwarty , itp.)

1

Możesz to osiągnąć poprzez Xcode 8 lub nowszy (po prostu przetestowany i nie wiesz czy jest dostępny przed tą wersją)

Wykonaj kroki @Joshua Finch powiedział jednak:

  1. Wybierz element bar zamiast na umieszczenie zakładek
  2. Got do "User Defined Runtime Atrybut"
  3. Dodaj nowy klucz
  4. nazwij go „wybranym "
  5. Ustaw swój typ boolean i wybierz true/lub zaznacz pole
+0

"xcode 8 lub wcześniej": czy naprawdę miałeś na myśli "przed"? Wydaje się zaprzeczać następującemu zdaniu, "nie wiem, czy jest dostępne przed tą wersją". Może miałeś na myśli "8 lub więcej"? –

0

Opierając Awi'el Grossa odpowiedź, ja j ust chciał wdrożyć to dla UITabBar, w przeciwieństwie do UITabBarController. Można to zrobić w następujący sposób:

class BaseTabBar: UITabBar { 

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