38 votes

Changement de ViewControllers avec UISegmentedControl dans iOS5

Je suis en train d'essayer quelque chose de très simple mais d'une manière ou d'une autre je n'arrive pas à le faire fonctionner. Tout ce que j'essaie de faire, c'est de passer entre 2 View Controllers en utilisant un UISegmentedControl comme vous pouvez le voir par exemple dans l'application App Store dans l'onglet Highlights.

Je suis en train d'utiliser iOS5 et les Storyboards.

Voici mon agencement dans Storyboard:

entrez la description de l'image ici

J'ai donc un root View Controller et deux UITableViews - Ces 2 TableViews je veux les changer.

Voici à quoi ressemble le fichier d'implémentation

#import "SegmentedLocationViewController.h"
#import "PastEventsLocationViewController.h"
#import "FutureEventsLocationViewController.h"

@interface SegmentedLocationViewController()
@property (weak, nonatomic) IBOutlet UISegmentedControl *segmentedControl;
@property (strong, nonatomic) NSArray *viewControllers;
@end

@implementation SegmentedLocationViewController

@synthesize segmentedControl = _segmentedControl;
@synthesize viewControllers = _viewControllers;

- (IBAction)indexDidChangeForSegmentedControl:(UISegmentedControl*)segmentedControl
{
    NSLog(@"index: %d", segmentedControl.selectedSegmentIndex);
}

- (void)setupViewControllers
{
    PastEventsLocationViewController *pastEventsLocationViewController = [[PastEventsLocationViewController alloc] initWithStyle:UITableViewStylePlain];
    FutureEventsLocationViewController *futureEventsLocationViewController = [[FutureEventsLocationViewController alloc] initWithStyle:UITableViewStylePlain];

    self.viewControllers = [NSArray arrayWithObjects:pastEventsLocationViewController, futureEventsLocationViewController, nil];
}

- (void)setupUI
{
    [self.segmentedControl addTarget:self action:@selector(indexDidChangeForSegmentedControl:) forControlEvents:UIControlEventValueChanged];
}

// Mise en œuvre de viewDidLoad pour effectuer des réglages supplémentaires après le chargement de la vue, généralement à partir d'un nib.
- (void)viewDidLoad
{
    [super viewDidLoad();
    [self setupViewControllers();
    [self setupUI();
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

Je peux déclencher l'événement de changement et enregistrer l'index actuellement sélectionné. Mais je n'ai aucune idée de où aller à partir de là.

Peut-être que quelqu'un peut m'orienter dans une certaine direction...?

1 votes

Avez-vous pensé à simplement recharger le tableView avec des valeurs différentes?

0 votes

Tu as raison. Je vais vérifier ça maintenant. Je pourrais penser trop compliqué...

0voto

Dominik Points 168

Vous pourriez intégrer votre contrôleur de vue initial dans un contrôleur de navigation. Pour ce faire, sélectionnez le contrôleur de vue dans le storyboard, puis Éditeur->Intégrer dans->Contrôleur de navigation.

Dans votre méthode indexDidChangeForSegmentedControl:, il vous suffit de pousser le contrôleur de vue correspondant dans la pile de navigation :

- (IBAction)indexDidChangeForSegmentedControl:(UISegmentedControl*)segmentedControl
{
    [self.navigationController pushViewController:[self.viewControllers objectAtIndex:[segmentedControl.selectedIndex]] animated:YES];

}

Mais votre approche n'est pas vraiment logique du tout lorsque vous utilisez des storyboards. Je ne sais pas si vous pouvez connecter un seul bouton de contrôle segmenté à un contrôleur de vue en utilisant des segues. Essayez simplement.

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