2 votes

Changement de viewController lors d'un clic sur le bouton

Je débute en programmation iPhone. Ce que j'essaie de faire est d'avoir un écran avec un bouton. Et je veux changer le contrôleur de vue non seulement la vue lorsque je clique sur ce bouton (je sais comment ajouter une sous-vue) car à partir de ce 2ème contrôleur de vue, je dois aller à la troisième vue ce qui n'est pas possible si j'ajoute une sous-vue en premier lieu. Est-ce que quelqu'un peut m'aider avec ça s'il vous plaît? Est-ce possible? et si oui, comment? Toutes les vues et les contrôleurs de vue sont créés de manière programmatique. Je n'utilise pas IB.

EDIT: voici le code pertinent qui est déclenché lorsque le bouton est cliqué

-(id)showCurrentLoc:(id)sender { 
 locationController = [currentLocController alloc]; 
 [entry removeFromSuperview]; 
 [newLoc removeFromSuperview]; 
 [currentLoc removeFromSuperview]; 
 [self.view setBackgroundColor:[UIColor clearColor]]; //[self.view addSubview: [locationController view]]; 
 [self.navigationController pushViewController:locationController animated:YES];  [locationController release]; 
 return 0; 
} //Le contrôleur de localisation est le tableViewController

Merci Vik

4voto

Janak Nirmal Points 15980

Vous pouvez faire quelque chose comme ça

        YourViewController *objYourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
        [self.navigationController pushViewController:objYourViewController animated:YES];
        [YourViewController release];

3voto

Caleb Points 72897

En général, vous utilisez un contrôleur de navigation pour ce genre de chose afin que l'utilisateur puisse facilement revenir à la vue précédente. Votre contrôleur de vue ferait alors quelque chose comme ceci :

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

Si vous souhaitez gérer vous-même les contrôleurs de vue, vous pouvez toujours simplement modifier la propriété rootViewController de la fenêtre. Veuillez lire Guide de programmation des contrôleurs de vue pour avoir une vision complète.

2voto

Krishnabhadra Points 18384

UINavigationController est ce dont vous avez besoin. Il gère une pile de UIViewControllers et si vous voulez ajouter un nouveau UIViewController, il suffit de le pousser dans cette pile de navigation. Il automatise le comportement du bouton de retour pour vous, et vous pouvez retirer votre UIViewController actuel de la pile lorsque vous avez fini avec lui.

0voto

ophychius Points 2389

Vous pourriez travailler avec un UINavigationController. Ajoutez votre premier UIViewController de cette manière dans la méthode init :

        [self setViewControllers:[NSArray arrayWithObject:viewController]];

Et puis, quand un bouton est cliqué ou un choix est fait, vous poussez le deuxième contrôleur avec (dans le premier viewController) :

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

De cette façon, vous obtiendrez également un bouton de retour automatique. En gros, vous créez une pile de UIViewControllers que vous pouvez pousser et dépiler comme avec une pile normale.

J'espère que cela vous aidera. Regardez ce qui suit : Référence de la classe UINavigationController

0voto

Chetan Bhalara Points 6936
- (void) loadViewAtIndex:(NSInteger)index {

    [self unloadViewAtIndex:activeViewIndex];

    switch (index) {

        case 1:
        {
            if (viewController1 == nil)
            {
                viewController1 = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil];
            }

            viewController1.view.frame = CGRectMake(0.0, 0.0, viewController1.view.frame.size.width, viewController1.view.frame.size.height);

            [window addSubview:viewController1.view];
        }
            break;

        case 2:
        {
            if (viewController2 == nil)
            {
                viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];
            }

            viewController2.view.frame = CGRectMake(0.0, 0.0, viewController2.view.frame.size.width, viewController2.view.frame.size.height);

            [window addSubview:viewController2.view];
        }
            break;

        default:
            break;
    }

    activeViewIndex = index;
}

- (void) unloadViewAtIndex:(NSInteger)index {
    switch (index) {

        case 1:
        {
            if (viewController1 != nil)
            {
                [viewController1.view removeFromSuperview];
                [viewController1 release];
                viewController1 = nil;
            }
        }
            break;

        case 2:
        {
            if (viewController2 != nil)
            {
                [viewController2.view removeFromSuperview];
                [viewController2 release];
                viewController2 = nil;
            }
        }
            break;

        default:
            break;
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X