2010-11-15 6 views
0

J'ai un UISplitViewController, et je voudrais changer le contrôleur de vue racine (sur le côté gauche de l'écran) lorsque je clique sur un bouton dans la vue de détail (le droit côté de l'écran).Définir ViewController racine dans un UISplitViewController à partir de la vue détaillée

Si je le fais dans la vue détaillée:

NextGameViewController *newTableViewController = [[NextGameViewController alloc] init]; 
NSArray *newVCs = [NSArray arrayWithObjects:newTableViewController, self, nil]; 
splitViewController.viewControllers = newVCs; 

Il se bloque avec l'erreur:

-[NextGameViewController setParentViewController:]: unrecognized selector sent to instance 0x4938a50 

NextGameViewController est une sous-classe de UITableViewController, alors pourquoi est-ce qui se passe? Si je le pousse sur la pile du contrôleur de vue depuis la vue racine, cela fonctionne correctement.

Répondre

0

parentViewController de UITableViewController est une propriété en lecture seule. Voir this SO question pour plus de discussion. Il semble que vous vouliez pousser une nouvelle vue de table sur le côté gauche de la vue de détail, mais toujours sous la vue racine, pas remplacer votre contrôleur de vue racine lui-même, qui est ce que vous décrivez.

Vous pouvez utiliser la baie que vous essayez de remplacer pour obtenir cette information. Voir this link à propos de la propriété viewControllers pour plus d'informations. De plus, le délégué de votre application doit avoir accès à la vue racine et à la vue détaillée à la fois. Vous pouvez obtenir le délégué de l'application et utiliser la propriété delegate.root pour l'insérer dans la pile du contrôleur, comme indiqué précédemment. Quelque chose comme ceci:

MyAppDelegate* del = (MyAppDelegate*)[[UIApplication sharedApplication] delegate]; 
// do what you want with del.root controller here 
+0

Je voudrais totalement changer dans un nouveau contrôleur de vue racine. Je ne veux pas le pousser sur la pile et faire apparaître la navigation. – Senior

+0

Si je comprends ce que vous faites correctement, vous essayez de remplacer la moitié de l'UISplitViewController plutôt que la table qu'il affiche à la racine. Plutôt que de remplacer ce qui est là, pourquoi ne pas cacher la table et ajouter une vue à sa place? Cela rendra le retour à la table plus facile et sera probablement agréable avec les capacités de rotation de UISplitViewController en mode portrait. Vous avez accès à la table mais pas à toutes les fonctionnalités de la vue racine, qui n'est pas seulement une table. Même si vous le faites, je ne pense pas que cela fera ce que vous attendez. – slycrel

+0

Pas vraiment, je veux changer la table, mais pas en le poussant sur la pile de navigation. Je veux effectivement changer sa racine. Pourquoi dois-je échanger la vue et pas seulement le contrôleur pour la vue? – Senior