Lorsque “par programme” création UINavigationController et UITabBarController, comment dois-je m'adresser à leurs fonctions (comme viewWillAppear?)

Je suis entrain de créer mon Nav et TabBar dans le code au lancement via:
DANS : myAppDelegate.m

- (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"];
resortsListViewController.navigationItem.title=@"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.title=@"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"];
resortsListViewController.navigationItem.title=@"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];
}

Comme vous le voyez, je suis re-à l'aide de ResortsListViewController pour différentes catégories affiche (stations avec des Plages, des stations avec des Piscines, des centres de villégiature avec des bars à expresso) ... maintenant, sans me harcèle (sourire) à propos de la bêtise de mes catégories (cos c'est une application de test) j'ai besoin de besoin de faire plusieurs choses:

  1. J'ai besoin de savoir dans quel onglet, cliquez sur a causé la ResortsListViewController à être affiché. J'espérais utiliser la BALISE, mais "initWithRootViewController" n'ont pas le "tag" de contrôle. Donc, si j'utilise un imagefilename qui est le nom de la catégorie, je peux utiliser le nom du fichier à distinguer des catégories...ou même navigationItem nom. J'ai besoin de savoir si il existe un moyen pour ResortsListViewController de savoir qui tabbar élément, cliquez sur l'a causé d'affichage. J'ai pensé à regarder pour une "action" que je pourrais attribuer à la tabbar élément, mais ce n'est pas la façon tabbarcontroller œuvres.

  2. Lorsque vous cliquez sur à partir d'un onglet à l'autre, de la vue, en effet, le changement, le titre de ResortsListViewController changements, etc...mais la TABLEVIEW qu'elle détient ne sont pas claires et affichage de toutes les nouvelles données. La recherche sur le web j'ai trouvé une solution possible:

http://discussions.apple.com/thread.jspa?threadID=1529769&tstart=0

ce qui revient à dire:

Pour UINavigationControllers
pour envoyer
"viewWill/A/Apparaître/Disparaître"
messages, il doit avoir reçu
"viewWill/A/Apparaître/Disparaître" de
de son contenant.

Qu'est-ce que le conteneur pour mon UINavigationControllers dans cette situation? myAppDelegate est défini dans la .h du fichier:

NSObject <UIApplicationDelegate, CLLocationManagerDelegate>

et n'ont pas d':

- (void)viewWillAppear:(BOOL)animated {
}

section. Quand j'en ajouter un, il dit: "NSObject peut ne pas répondre à viewWillAppear" dans le débogueur.

Aucune aide là-bas?

OriginalL'auteur Jann | 2010-02-07