Aller au contenu


iPhone SDK: utilisation de UISegmentedControl dans une navigation bar

Dans l’application Mail, vous avez peut-être remarqué qu’une fois un mail sélectionné, vous pouvez naviguer vers le mail précédent et/ou suivant via deux boutons situés à droite de la navigation bar:

uisegmentedcontrol-1

Mais comment avoir plusieurs boutons en tant que rightBarButtonItem d’une navigation bar?
Voila le code pour reproduire cet effet, grâce à UISegmentedControl, à ajouter par exemple dans la méthode viewDidLoad de votre ViewController chargé par un UINavigationController

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- (void)viewDidLoad {
	//...
	NSArray *segControlItems = [NSArray arrayWithObjects:@"<", @">", nil];
	UISegmentedControl *segControl = [[UISegmentedControl alloc] initWithItems:segControlItems];
	segControl.segmentedControlStyle = UISegmentedControlStyleBar;
	segControl.momentary = YES;
	[segControl addTarget:self action:@selector(segAction:) forControlEvents:UIControlEventValueChanged];
 
	UIBarButtonItem *segBarItem = [[UIBarButtonItem alloc] initWithCustomView:segControl];
	self.navigationItem.rightBarButtonItem = segBarItem;
 
	[segControl release];
	[segBarItem release];
}
 
- (void)segAction:(id)sender {
	NSLog(@"clicked %d", [sender selectedSegmentIndex]);
}

Le résultat est le suivant:

uisegmentedcontrol-2

A vous de customiser ce code pour y placer des images au lieu des strings (via [UIImage imageNamed:] par exemple), et gérer les events sur les boutons faisant partie de ce UISegmentedControl, via la méthode segAction.

Notez également que ce code peut être adapté pour placer plusieurs boutons en tant que titleView et ainsi obtenir:

uisegmentedcontrol-3

Le code deviendrait alors:

1
2
3
4
5
6
7
8
9
10
11
- (void)viewDidLoad {
	//...
	NSArray *segControlItems = [NSArray arrayWithObjects:@"Item 1", @"Item 2", nil];
	UISegmentedControl *segControl = [[UISegmentedControl alloc] initWithItems:segControlItems];
	segControl.segmentedControlStyle = UISegmentedControlStyleBar;
	[segControl addTarget:self action:@selector(segAction:) forControlEvents:UIControlEventValueChanged];
 
	self.navigationItem.titleView = segControl;
 
	[segControl release];
}

Posté dans développement, iPhone. Tags , .

3 commentaire(s)

  1. merci beaucoup

  2. seb dit

    Simple, clair et précis

    merci :)

  3. bkill dit

    Content que ca puisse vous servir :)

Quelques tags HTML sont acceptés

(obligatoire)

(obligatoire, mais ne sera pas diffusé)

ou faire un rétrolien depuis votre site.