2009-05-14 14 views
2

Ich möchte ein UIBarButtonItem auf meiner iPhone-Anwendung erstellen, die zwei "Abschnitte" hat. Grundsätzlich möchte ich Funktionen haben, die den Schaltflächen "Heute", "Diese Woche" und "Alle" entsprechen, die im Abschnitt "Meist gesehen" der YouTube iPhone App enthalten sind.Wie erstelle ich ein UIBarButtonItem mit mehreren "Abschnitten"?

Es sieht nicht so aus, als wäre diese Funktionalität mit mehreren UIBarButtonItems erreicht worden, da nur einer der drei "Abschnitte" gleichzeitig ausgewählt werden kann. Weiß jemand wie das gemacht wurde?

Antwort

7

Was Sie dort sehen, ist ein UISegmentedControl. Es ist ziemlich einfach einzurichten. Was YouTube ist zu tun (wahrscheinlich) so etwas wie diese:

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

Was Sie suchen, ist die UITabBar Steuerung mit UITabBarItem s.

1

Mit Blick auf die YouTube App denke ich, dass Sie das UISegmentedControl tatsächlich verwenden möchten.

2

Eigentlich, denke ich, dass er eine UISegmentedControl beschreibt, die wie so zu der Navigationsleiste der aktuellen Ansicht hinzugefügt werden können:

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

Sie würden die Segmente der UISegmentedControl („Heute Letzte Woche, All“) festgelegt, wie so (das auch den Rückruf für setzt, wenn der Wert der Steueränderungen):

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

ich es nicht täte Cop Dies kann von einem Arbeitsprojekt abhängen, so dass es einige geringfügige syntaktische Fehler geben kann, aber dies sollte Sie in die richtige Richtung lenken.

Verwandte Themen