tworzę moje NAV i umieszczenie zakładek w kodzie przy uruchomieniu poprzez: IN: myAppDelegate.mKiedy "programowo" tworzenia UINavigationController i UITabBarController, w jaki sposób rozwiązać swoje funkcje (jak viewWillAppear?)
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// set up a local nav controller which we will reuse for each view controller
UINavigationController *localNavigationController;
// create tab bar controller and array to hold the view controllers
tabBarController = [[UITabBarController alloc] init];
NSMutableArray *localControllersArray = [[NSMutableArray alloc] initWithCapacity:4];
// setup the first view controller (Root view controller)
RootViewController *myViewController;
myViewController = [[RootViewController alloc] initWithTabBar];
// create the nav controller and add the root view controller as its first view
localNavigationController = [[UINavigationController alloc] initWithRootViewController:myViewController];
// add the new nav controller (with the root view controller inside it)
// to the array of controllers
[localControllersArray addObject:localNavigationController];
// release since we are done with this for now
[localNavigationController release];
[myViewController release];
// setup the first view controller just like the first
ResortsListViewController *resortsListViewController;
resortsListViewController = [[ResortsListViewController alloc] initWithNibName:@"ResortsListView" bundle:nil];
resortsListViewController.title = @"Category1";
resortsListViewController.tabBarItem.image = [UIImage imageNamed:@"image1.png"];
[email protected]"Category1";
localNavigationController = [[UINavigationController alloc] initWithRootViewController:resortsListViewController];
[localControllersArray addObject:localNavigationController];
[localNavigationController release];
// setup the second view controller just like the first
ResortsListViewController *resortsListViewController;
resortsListViewController = [[ResortsListViewController alloc] initWithNibName:@"ResortsListView" bundle:nil];
resortsListViewController.title = @"Category2";
resortsListViewController.tabBarItem.image = [UIImage imageNamed:@"image2.png"];
resortsListViewController.navigationItem[email protected]"Category2";
localNavigationController = [[UINavigationController alloc] initWithRootViewController:resortsListViewController];
[localControllersArray addObject:localNavigationController];
[localNavigationController release];
// setup the third view controller just like the first
ResortsListViewController *resortsListViewController;
resortsListViewController = [[ResortsListViewController alloc] initWithNibName:@"ResortsListView" bundle:nil];
resortsListViewController.title = @"Category3";
resortsListViewController.tabBarItem.image = [UIImage imageNamed:@"image3.png"];
[email protected]"Category3";
localNavigationController = [[UINavigationController alloc] initWithRootViewController:resortsListViewController];
[localControllersArray addObject:localNavigationController];
[localNavigationController release];
[resortsListViewController release];
// load up our tab bar controller with the view controllers
tabBarController.viewControllers = localControllersArray;
// release the array because the tab bar controller now has it
[localControllersArray release];
// add the tabBarController as a subview in the window
[window addSubview:tabBarController.view];
// need this last line to display the window (and tab bar controller)
[window makeKeyAndVisible];
}
As widzisz, ponownie używam ResortsListViewController dla różnych wyświetlaczy kategorii (ośrodki z plażami, ośrodki z basenami, ośrodki z barami espresso) ... teraz, nie nękając mnie (grin) o głupotę moich kategorii (bo to jest test app) Potrzebuję zrobić kilka rzeczy:
Potrzebuję być w stanie wiedzieć, które kliknięcie tabulacji spowodowało wyświetlenie ResortsListViewController. Miałem nadzieję użyć TAG, ale "initWithRootViewController" nie ma kontrolki "tag". Tak więc, jeśli użyję nazwy pliku obrazu, który jest nazwą kategorii, mogę użyć tej nazwy pliku, aby odróżnić kategorie ... lub nawet nazwę navigationItem. Muszę wiedzieć, czy istnieje sposób, aby ResortsListViewController wiedział, które kliknięcie elementu tabla spowodowało jego wyświetlenie. Pomyślałem, aby wyszukać "akcję", którą mógłbym przypisać do elementu tabbar, ale to nie działa w ten sposób, że działa tabbarcontroller.
Po kliknięciu z jednej karty na drugą widok rzeczywiście się zmienia, tytuł zmiany ResortsListViewController zmienia się itp., Ale trzymany w ten sposób widok TABLEVIEW nie powoduje wyczyszczenia i wyświetlenia żadnych nowych danych. Wyszukiwanie w internecie znalazłem Możliwe rozwiązanie:
http://discussions.apple.com/thread.jspa?threadID=1529769&tstart=0
zasadzie mówiąc:
Aby UINavigationControllers wysłać "viewWill/Czy/Pojawiają/Disappear" wiadomości , musi otrzymać "viewWill/Did/Appear/Disappear" z swojego kontenera.
Co to jest kontener dla moich kontrolerów UINavigation w tej sytuacji? myAppDelegate jest zdefiniowana w pliku .h jako:
NSObject <UIApplicationDelegate, CLLocationManagerDelegate>
i nie mają:
- (void)viewWillAppear:(BOOL)animated {
}
sekcję. Kiedy dodaję jeden, mówi "NSObject może nie odpowiadać -viewWillAppear" w debugerze.
Każda pomoc tam dostępna?
Spróbuję tego. Dam ci znać w AM (niedziela). Druga część jest nieco myląca, ponieważ mogę dodać viewWillAppear XCode nie będzie automatycznie uzupełniany i ostrzega, że "myAppDelegate" może nie odpowiadać -viewWillAppear. Rozumiesz? – Jann
Twoja aplikacjaDelegate nie powinna odpowiadać na viewWillAppear, jeśli jest to obiekt NSObject (tak jak w dowolnym standardowym szablonie Xcode). Wspominałeś: ResortsListViewController * resortsListViewController. Plik, w którym jest zaimplementowany, jest miejscem, w którym chcesz umieścić swoją metodę viewWillAppear. –