2009-05-14 9 views
2

Je voudrais créer un UIBarButtonItem sur mon application iPhone qui a deux "sections". Fondamentalement, j'aimerais avoir des fonctionnalités équivalentes aux boutons «Aujourd'hui», «Cette semaine» et «Tous» figurant dans la section «Les plus consultés» de l'application YouTube pour iPhone.Comment créer un UIBarButtonItem avec plusieurs "sections"?

Il ne semble pas que cette fonctionnalité ait été accomplie avec plusieurs UIBarButtonItems puisqu'une seule des trois "sections" peut être sélectionnée à la fois. Est-ce que quelqu'un sait comment cela a été fait?

Répondre

7

Ce que vous voyez là est un UISegmentedControl. C'est assez facile à mettre en place. Qu'est-ce que YouTube fait est (probablement) quelque chose comme ceci:

NSArray * items = [[NSArray alloc] initWithObjects: NSLocalizedString(@"Today", @""), 
         NSLocalizedString(@"This Week", @""), 
         NSLocalizedString(@"All", @""), nil]; 
UISegmentedControl * switcher = [[UISegmentedControl alloc] initWithItems: items]; 
[items release]; 

// setup the switcher: correct UI style, tint, etc. 
switcher.style = UISegmentedControlStyleBar; 
switcher.tint = self.navigationController.navigationBar.tintColor; // unnecessary? 

// set the target function -- needs to check selectedIndex property 
[switcher addTarget: self 
      action: @selector(switcherTapped:) 
    forControlEvents: UIControlEventValueChanged]; 

// set default selection 
switcher.selectedSegmentIndex = 0; 

// set the switcher as a custom view to use in place of the normal title 
self.navigationItem.titleView = switcher; 
[switcher release]; 
0

Ce que vous cherchez est le UITabBar contrôle avec UITabBarItem s.

1

En regardant l'application YouTube, je pense que vous allez réellement vouloir utiliser le UISegmentedControl.

2

En fait, je pense qu'il est décrit un UISegmentedControl, qui peut être ajouté à la barre de navigation de la vue actuelle comme ceci:

UISegmentedControl *segmentedControl = ... 
self.navigationItem.titleView = segmentedControl; 
[segmentedControl release]; 

Vous définissez les segments de la UISegmentedControl (« Aujourd'hui, la semaine dernière, tous ») comme si (cela fixe également la fonction de rappel lorsque la valeur des commandes de contrôle):

NSArray *sampleArray = --makeAnArrayHere--; 
UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] 
    initWithItems:sampleArray]; 
[segmentedControl addTarget:self action: 
    @selector(segmentAction:) forControlEvents:UIControlEventValueChanged]; 

je n'ai pas flic Cela provient d'un projet en cours, donc il peut y avoir quelques erreurs syntaxiques mineures, mais cela devrait vous orienter dans la bonne direction.

Questions connexes