2009-01-25 10 views
10

Próbuję połączyć aplikację TabBar + Nawigacja.Jak połączyć TabBar + Nawigację z XCode

Mam 5 pasków kart, 4 to lista rzeczy i drążenie do szczegółów widoków.

staram się śledzić ten tutorial:

http://www.iphonedevforums.com/forum/iphone-sdk-development/124-view-controller-problem.html

Ale zawsze pusty pogląd.

To, co robię, z czystym projektu:

  • zacznę z aplikacji szablonu umieszczenie zakładek.
  • Umieszczam 5 przycisków paska zakładek.
  • utworzyć kontroler jak:

    @interface FirstViewController: UINavigationController {

    }

  • kładę główny window.xib trybu drzewa & zmienić wybrany pierwszy wgląd do FirstViewController
  • Wybieram kontroler TabBar w Konstruktorze interfejsów, przejdź do TabBar Atrybuty & zmienić klasę na kontroler nawigacji.
  • Wybierz widok pięści & umieścić stalówki nazwę „SecondView”

W odpowiedzi dostaję pusty ekran.

Muszę dodać, że chcę nawigować po widokach szczegółów, nie z głównego okna.

tj. W pasku głównego okna karty 1 znajduje się lista osób. Wybieram osobę, którą chcę przejść do okna szczegółów.

Odpowiedz

1

Oto tutorial, który udało mi się uzyskać.

Przeczytałem również oficjalną dokumentację SDK na temat: Combining Tab Bar and Navigation Controllers. Ponieważ wciąż się uczę, samouczek pomógł mi bardziej niż docs.

UWAGA: w samouczku nie wydaje mi się, abyś potrzebował podklasy UINavigationController i teraz eksperymentuję z tym pomysłem.

+1

Trochę się rozglądałem, ale tutorial, do którego się odwołałeś został przeniesiony. Jest teraz w: [ta lokalizacja] (http://codenugget.org/how-to-embed-a-navigation-controller-inside-a) – Critter

15

Po pierwsze, nigdy nie chcesz podklasy UINavigationController lub UITabBarController.

Po drugie, ja nie bardzo się to, co zrobiłeś, ale poprawna sekwencja utworzyć kontroler nawigacji wewnątrz kontrolera paska karta jest coś takiego:

// in MyAppDelegate.h 
UINavigationController *nc1, *nc2; 
FirstTabRootViewController *vc1; 
SecondTabRootViewController *vc2; 
UITabBarController *tbc; 

// in MyAppDelegate.m 
nc1 = [[UINavigationController alloc] init]; 
vc1 = [[FirstTabRootViewController alloc] initWithNibName:nil bundle:nil]; 
vc1.tabBarItem.title = @"Tab 1"; 
vc1.tabBarItem.image = [UIImage imageNamed:@"tab1.png"]; 
vc1.navigationItem.title = "Tab 1 Data"; 
nc1.viewControllers = [NSArray arrayWithObjects:vc1, nil]; 

nc2 = [[UINavigationController alloc] init]; 
vc2 = [[SecondTabRootViewController alloc] initWithNibName:nil bundle:nil]; 
vc2.tabBarItem.title = @"Tab 2"; 
vc2.tabBarItem.image = [UIImage imageNamed:@"tab2.png"]; 
vc2.navigationItem.title = "Tab 2 Data"; 
nc2.viewControllers = [NSArray arrayWithObjects:vc2, nil]; 

tbc = [[UITabBarController alloc] init]; 
tbc.viewControllers = [NSArray arrayWithObjects:nc1, nc2, nil]; 

Należy pamiętać, że jest to kontroler widoku, który kontroluje tekst/ikona na pasku kart i pasku nawigacji. Utwórz instancję UINavigationController dla każdej karty; UINavigationController zawiera stos kontrolerów widoku (zobacz właściwość viewControllers), który powinien zawierać co najmniej jedną pozycję - kontroler główny dla tej karty. Utwórz także kontroler UITabBarController, aby zarządzać zakładkami.

Oczywiście, możesz (i prawdopodobnie powinieneś) użyć konstruktora interfejsu zamiast kodu, aby utworzyć instancje wspomnianych klas i ustawić właściwości. Ważne jest jednak, aby zrozumieć, co dzieje się za kulisami; Konstruktor interfejsów to nic innego jak wygodny sposób tworzenia instancji i konfigurowania obiektów.

Mam nadzieję, że to będzie pomocne; proszę sprecyzować swoje pytanie, jeśli tak nie jest.

+1

Świetnie! Спасибо, Андрей, очень помогло! – Darmen

+0

to bardzo pomogło. Rozglądałem się za programowalnym, dobrym kontrolerem paska kart. – Jake

1

Próbowałem utworzyć aplikację iPhone z UITabBarController i niektóre UINavigationController wewnątrz niego i napotkał te same problemy, co "mamcx". Z twoim przykładowym kodem uruchamiam go :) Wielkie dzięki.

Oto, jak to działa dla mnie.

// YOURS 
fourthNavigation = [[UINavigationController alloc ] init ]; 
fourthViewController = [[[FourthTabRootController alloc] initWithNibName:@"FourthView" bundle:nil] autorelease]; 
fourthNavigation.tabBarItem.title = @"YOURS"; 
fourthNavigation.viewControllers = [NSArray arrayWithObjects:fourthViewController, nil]; 

// Add self-defined UIViewControllers to the tab bar 
tabBarController.viewControllers = [NSArray arrayWithObjects:firstNavigation,secondNavigation, thirdNavigation, fourthNavigation, nil]; 
// Add the tab bar controller's current view as a subview of the window 
[window addSubview:tabBarController.view]; 

Pozostałe "pierwszeNawigacje, ..." UINavigationControllers są tworzone w ten sam sposób. Załaduję elementy widoku z plików nib, które są połączone z moimi subklasowanymi klasami UIViewController. Nie musisz dodawać do swojego widoku elementu NavigationBar w IB, ponieważ obiekt UINavigationController ma już jeden. Musisz więc tylko ustawić tytuł w "initWithNibName"

// The designated initializer. Override to perform setup that is required before the view is loaded. 
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
    // Custom initialization 
    self.title = @"YOURS"; 
} 
return self; 
} 

Mam nadzieję, że to pomaga.

2

Nadal pojawia się pusty ekran Włączenie aplikacji po wdrożeniu powyższego kodu. Gdzie piszę to źle.

nc1 = [[UINavigationController alloc] init]; 
    nc2 = [[UINavigationController alloc] init]; 
    vc1 = [[FirstRootViewController alloc]initWithNibName:@"FirstRootViewController" bundle:nil]; 
    vc1.tabBarItem.title = @"Item 1"; 
    vc1.tabBarItem.image= [UIImage imageNamed:@"home.png"]; 
    vc1.navigationItem.title = @"Tab1 Data"; 
    nc1.viewControllers = [NSArray arrayWithObjects:vc1,nil]; 
    vc2 = [[SecondRootViewController alloc]initWithNibName:@"SecondRootViewController" bundle:nil]; 
    vc2.tabBarItem.title = @"Item 2"; 
    vc2.tabBarItem.image= [UIImage imageNamed:@"home.png"]; 
    vc2.navigationItem.title = @"Tab2 Data"; 
    nc2.viewControllers = [NSArray arrayWithObjects:vc2,nil]; 
    tbc = [[UITabBarController alloc]init]; 
    tbc.viewControllers = [NSArray arrayWithObjects:nc1,nc2,nil]; 
    [window addSubview:tbc.view]; 
    [window makeKeyAndVisible]; 
Powiązane problemy