2009-12-16 6 views
1

J'ai une question basique qui me rend fou.iPhone UITableViewDelegate Question

J'ai une classe héritant de UITableViewController. C'est le contrôleur de racine dans mon contrôleur de navigation. J'ai une autre classe qui implémente les protocoles UITableViewDelegate et UITableViewDataSource (mon délégué).

Fondamentalement, dans la méthode tableView: didSelectRowAtIndexPath: de mon délégué, je veux pousser un nouveau contrôleur.

Lorsque les protocoles délégués ont été simplement mis en œuvre par le UITableViewController, il était facile:

[self.navigationController pushViewController:nextController animated:YES]; 

I (évidemment) ne peut pas faire dans la classe des délégués. Comment diable puis-je me référer à la sous-classe UITableViewController pour avoir accès à la navigationController? Ça me rend fou!


Débit de base:

  1. UITableViewController appelle délégué
  2. délégué
  3. court tableView: didSelectRowAtIndexPath:
  4. dans le délégué tableView: didSelectRowAtIndexPath :, code doit pousser nouveau contrôleur sur NavigationController
  5. delegate ne fait pas référence à navController ou à TableViewController pour effectuer le push.
  6. Le code donne une erreur de compilation si j'essaie de passer dans le délégué le tableController ou navController via une propriété. donc, je ne peux pas lui donner une référence retour à la TableViewController appelant
+0

une solution plus simple est peut-être de ne pas avoir cette classe supplémentaire à tous, et mettre en œuvre juste la vue de la table des méthodes de délégués dans votre classe contrôleur racine. –

Répondre

0

Votre UIApplicationDelegate devrait avoir une référence au contrôleur de navigation. Vous n'avez pas vraiment besoin d'une référence au UITableViewController.

Vous pouvez tout simplement faire quelque chose comme ceci:

// Get the App delegate 
YourAppDelegate * app = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; 

// Get the UINavigationController used by the application 
UINavigationController * nav = app.navigationController; 

// Push the next view controller 
[nav pushViewController:nextController animated:YES]; 
+0

* sent le front * Je savais que je regardais quelque chose de facile! Je viens de Java, donc une partie de la hiérarchie sur la façon dont les choses sont assemblées est toujours floue :) Merci! – John