0

Permettez-moi d'abord de décrire le contexte du problème. J'ai 2 UIViewController appel AdminViewController et ButtonReorderViewController. AdminViewController contiennent 1 bouton. ButtonReorderViewController contient 1 bouton et 1 image. Bouton en AdminViewController lié à un événement appeler goToReorderButton. Le contenu de goToReorderButton sont ci-dessous:Iphone: Problème de va-et-vient entre deux UIViewController

ButtonReorderViewController *buttonReorder = [[ButtonReorderViewController alloc] initWithNibName:@"ButtonReorderViewController" bundle:[NSBundle mainBundle]]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:buttonReorder]; //Add a Navigation Controller to the root view 
[navController setNavigationBarHidden:TRUE]; 
buttonReorder = (ButtonReorderViewController *) navController; 
[[buttonReorder view] setFrame:CGRectMake(0, -20, 320, 470)]; 
[self.view addSubview:buttonReorder.view]; 

J'utilise UINavigationController pour me permettre de glisser vers la gauche et right.So je suis AdminViewController, et je clique sur goToReorderButton, il charge ButtonReorderViewController. Je suis en mesure de glisser à gauche et à droite (génial !!!) Je cliquez sur le bouton ButtonReorderViewController appel goToAdmin, il suffit de revenir à la AdminViewController

-(void) goToAdmin{ 
    [self.view removeFromSuperview]; 
} 

Cependant, dès que je reviens à AdminViewController, je Je ne peux rien cliquer du tout. Le programme ne se faufile pas, c'est juste que je ne peux pas cliquer sur le bouton du tout. si je supprime la ligne buttonReorder = (ButtonReorderViewController *) navController; à l'intérieur goToReorderButton, alors tout va bien. Une idée de comment résoudre ce problème?

Répondre

1

Je ne suis pas sûr que je vous suis, mais je pense que vous devriez utiliser les méthodes de UINavigationController pour naviguer entre les contrôleurs de vue:

Le contrôleur de vue admin doit être le contrôleur de vue racine du contrôleur de navigation et alors vous pouvez pousser et faire apparaître le contrôleur de vue de réorganisation.

Dans délégué d'application (applicationDidFinishLaunching: méthode):

// TODO: Instantiate the adminController 

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:adminController]; 
[window addSubview:navController.view]; 

Dans AdminViewController (bouton retoucher méthode de gestionnaire d'événement à l'intérieur):

// TODO: Instantiate the buttonReorder 

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

Dans ButtonReorderViewController (retour bouton retouche méthode de gestionnaire d'événement à l'intérieur):

[self.navigationController popViewControllerAnimated:YES]; 

Bien sûr, vous devez instancier les contrôleurs de vue avant de les utiliser ...


Cheers,
Michael.

+0

J'ai une structure très similaire à celle que vous suggérez, juste un peu plus complexe. Disons que 'viewA' est celui que je' initWithRootViewController', puisque 'viewA' va essayer d'afficher le contenu de coredata. Disons la première vue de 'viewA', affichez l'objet 4, et il y a 8 objets, puis balayez vers la droite pour afficher le reste de l'objet. C'est pourquoi 'viewA' en tant que contrôleur UINavigation (profitez de l'affichage push et pop). Cependant, si j'essaie de passer en mode admin, je ne vais pas 'pushView', mais plutôt' addSubview', et ensuite retourner 'removeFromSuperView'.Cela fonctionne bien, mais maintenant j'ajoute un autre composant dans –

+0

(S'il vous plaît lire ci-dessus d'abord) Le nouveau composant permet à l'utilisateur de réorganiser la position de l'objet dans la vue. Donc, dans la vue 'Admin', maintenant j'appelle' viewB' par 'addSubView: viewB'. 'viewB' a la même fonction que' viewA', donc je veux avoir la possibilité de 'pousser et pop '. Donc je veux faire 'viewB' un' UINavigationController' comme 'viewA'. Si je clique sur 'Return button', j'appelle' removeFromSuperView' pour revenir à 'Admin', cependant, dès que je reviens à la vue' Admin', je ne peux rien cliquer sur –

+0

Comme je l'ai écrit, aucun de vos contrôleurs de vue ne devrait être un contrôleur de navigation. Vous avez UNIQUEMENT un (dans la structure suggérée) contrôleur de navigation et vous venez de pousser et de sauter vos (3) contrôleurs de vue. En passant, le bouton "retour" est intégré dans UINavigationItem qui est ajouté automatiquement en haut (l'en-tête) - vous n'avez pas besoin d'implémenter ce bouton par vous-même. Supprimez simplement la ligne '[navController setNavigationBarHidden: TRUE];' ... Consultez les exemples d'applications d'Apple. Nav. le contrôleur est utilisé presque dans chaque application d'échantillon. Et toujours de la même manière. N'essayez pas de réinventer la roue ... –

-1

Je ne suis pas sûr mais je pense que vous pouvez utiliser la méthode PusViewController de NavigationController pour faire votre travail.

0

Il semble que l'application se soit écrasée sur la ligne que vous avez indiquée. La console de débogage génère-t-elle quelque chose lorsqu'elle se bloque?

Apparemment, la ligne buttonReorder = (ButtonReorderViewController *) navController; échoue sur la distribution. Êtes-vous sûr que ButtonReorderViewController s'étend UINavigationController? Si non, alors vous ne pouvez pas le lancer comme ça.

Questions connexes