2011-08-08 4 views
0

J'ai un UITableViewController qui a une UISearchbar dans sa vue d'en-tête. Lorsque l'utilisateur effectue une recherche, mon UITableView remplit les résultats. Je veux pousser un nouveau contrôleur de vue sur la pile lorsque l'utilisateur sélectionne un résultat.UITableViewController ne pousse pas les vues sur la pile

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

    if (cell.accessoryType == UITableViewCellAccessoryNone) { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 

     WatchlistSheetView* watchlistSheetView = [[WatchlistSheetView alloc] initWithNibName:@"WatchlistSheetView" bundle:nil]; 
     watchlistSheetView.symbol = cell.textLabel.text; 
     [self.navigationController pushViewController:watchlistSheetView animated:YES]; 
     [watchlistSheetView release]; 

     //[self dismissModalViewControllerAnimated:YES]; 
    }  
} 

Ce qui suit ne pousse pas un contrôleur de vue sur la pile. Rien ne se passe. Comment puis-je résoudre?

+1

Pouvez-vous confirmer que watchlistSheetView n'est pas nul après cet appel et que self.navigationController n'est pas nul? Dans l'ensemble ce code a l'air bien. –

Répondre

0

Je suppose que self.navigationController est nul, de sorte que le message pushViewController est envoyé nulle part.

Pour résoudre ce problème, vous pouvez créer un UINavigationController dans votre application:didFinishLaunching et poussez votre contrôleur de vue de table sur elle comme son contrôleur racine, le long de ces lignes:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    UINavigationController* navigation = [[UINavigationController alloc] init]; 

    .... 
    [navigation pushViewController:yourTableViewController animated:NO]; 
    ... 
    [window addSubview:[navigation view]]; 
    [self.window makeKeyAndVisible]; 
} 

ou vous pouvez utiliser initWithRootController pour initialiser la navigation voir le contrôleur avec votre contrôleur de vue de table.

+0

Ce UITableViewController est présenté de manière modale. Est-ce que cela signifie que je n'ai pas de UINavigationController? Où puis-je configurer cela? –

+0

le code dans ma réponse explique ce que vous devez faire pour configurer un contrôleur de navigation. Si vous n'avez pas créé de contrôleur de navigation, soit par code, soit dans IB, vous ne l'avez pas et vous devez le créer. La meilleure chose, créez-la dans 'application: didFinishLaunchingWithOptions' comme je l'ai montré dans ma réponse. Si vous avez besoin que votre interface soit modale, vous pouvez présenter le contrôleur de navigation de manière modale, mais d'abord je le ferais de manière "normale". – sergio

+0

J'ai un contrôleur de navigation. Mon application est une application UITabBarController, qui contient UINavigationControllers pour chaque onglet. L'un des onglets lance un autre UITableView modalement. C'est là que j'ai le problème. Peut-être que j'ai besoin de la barre de navigation de parentViewController? –

0

Il semble que vous appelez vous-même lorsque vous faites référence à votre contrôleur de navigation. Avez-vous réellement allouer un contrôleur de navigation et l'assigner à soi-même?

Questions connexes