2010-10-26 24 views
5

W związku z tym pytaniem: here, jestem naprawdę zainteresowany tworzeniem własnego UITabBar i "toczenia własnego". Jestem bardzo ciekawy, jak to się robi, zwłaszcza w aplikacji takiej jak na Twitterze.Jak mogę utworzyć własny UITabBar?

Jak mogę to zrobić? Czy ktokolwiek może wskazać jakieś dobre zasoby na temat tego, jak je podklasować? Czy powinienem to zrobić programowo, czy w XIB?

Edycja: Czekam na to z niestandardowymi ikonami/wybranymi ikonami i mającymi tylko ikony. Edycja2: Po przeczytaniu dalszych odpowiedzi, brzmi to jak niestandardowy XXTabBarcontroller, co właśnie chcę tutaj zrobić. Czy ktoś może to komentować?

Dziękuję

Odpowiedz

6

Nie wiem, czy jest najlepiej sposobem, aby to zrobić, ale podzielę się moim doświadczeniem:

tworzę własną wersję paska kart przez instacji UIView w przeciwieństwie do UITabBar. Jak wspomina powiązane pytanie, klasy UI Apple są dość skomplikowane pod względem rozmiaru i nie sądzę, żebym mógł uzyskać podklasę UITabBar do rozmiaru, jak chciałem.

Ponieważ nie miałem podklasy UITabBar, również skończyłem przetaczać własne wersje UITabBarController i UITabBarDelegate, z interfejsami, które są zasadniczo takie same jak klasy Apple. Byłem w stanie użyć UITabBarItem do przechowywania tytułu i ikony dla przycisków na pasku kart, co jest przydatne, ponieważ UIViewControllers mają właściwość tabBarItem. Dzięki temu można przechowywać tylko tablicę kontrolerów UIViewController w kontrolerze, w przeciwieństwie do tablic dla kontrolerów i elementów paska kart.

Ponieważ używałem głównie klas niestandardowych, zrobiłem to wszystko programowo, łącznie z tworzeniem, konfigurowaniem i układaniem przycisków na pasku kart.

Tak jak powiedziałem, to tylko moje doświadczenie, mam nadzieję, że to pomaga.

+0

Dzięki Tim. Czy masz jakiś kod, który mógłbyś udostępnić, żeby to pokazać? – barfoon

+0

Niestety, mój pasek kart i powiązany kontroler mają kilka niestandardowych zachowań, które musiałem wziąć pod uwagę, aby opublikować całość jako przykład. Nie mam teraz czasu, aby to zrobić, ale jeśli masz konkretne pytania dotyczące implementacji, chętnie udostępniam fragmenty kodu. –

+0

W jaki sposób radziłeś sobie z aktualizowaniem 'UIButton's, gdy zmieniły się właściwości na' UITabBarItem'? –

6

Zrobiłem to niedawno w aplikacji. Było tak mało "kodu", że prawie nic nie można opublikować. Zrobiłem to jako takie:

Utworzono UIImageView (wysokość około 50 pikseli) i ułożyłem na dole ekranu. Wypełniłem go obrazem podobnym do paska tabulacji - tj. Jakimś szarym gradientem. Prawdopodobnie podzieliłem UIImageView - ale nie musisz tego robić.

Narysowałem kilka przycisków/ikon - każdy 37x37.

Umieściłem grupę UButtonów w "pasku zakładek" - i utworzyłem je "Niestandardowe" widoki, za pomocą przycisków/ikon, które stworzyłem.

Po prostu użyłem metody touchUpInside, aby zrobić coś.

Kiedy potrzebowałem ochoty - przyczepiłbym guziki do mojego kodu przez i IBOutlet, więc mogłem je "wyłączyć" - i narysowałem dla nich szarawe "wyłączony stan".

+0

Czy nadal możesz to robić dzisiaj? czy jest lepsze podejście? :) –

4

Jeśli chcesz korzystać z tej samej funkcjonalności, polecam użycie kontrolera UITabBarController, ukryć pasek kart, a następnie utworzyć własną nawigację. Zrobiłem to kilka razy i działa całkiem nieźle.

Użyj czegoś takiego, aby ukryć pasek kart i rozwinąć widok zawartości.

- (void)makeTabBarHidden:(BOOL)hide 
{ 
    if ([tabBarController_.view.subviews count] < 2) 
     return; 
    UIView *contentView; 
    if ([[tabBarController_.view.subviews objectAtIndex:0] isKindOfClass:[UITabBar class]]) 
     contentView = [tabBarController_.view.subviews objectAtIndex:1]; 
    else 
     contentView = [tabBarController_.view.subviews objectAtIndex:0]; 
    if (hide) 
    { 
     contentView.frame = tabBarController_.view.bounds;  
    } 
    else 
    { 
     contentView.frame = CGRectMake(tabBarController_.view.bounds.origin.x, 
             tabBarController_.view.bounds.origin.y, 
             tabBarController_.view.bounds.size.width, 
             tabBarController_.view.bounds.size.height - tabBarController_.tabBar.frame.size.height); 
    } 
    tabBarController_.tabBar.hidden = hide; 
} 

Następnie utwórz własną nawigację za pomocą UButtons, aby przełączać między kontrolerami widoku.

[tabBarController_ setSelectedIndex:0];

Powiązane problemy