2012-12-07 12 views
9

Ich gründe ein UIPickerView auf Entscheidungen zu haben wie Wahl eine, Wahl b, Wahl c und so weiter. Ich habe versucht, den Beispielcode von Apple zu interpretieren, aber das scheint für einen Anfänger wie mich sehr schwierig zu verstehen. Ich möchte auch, dass die Auswahl aus der Auswahlansicht mich zu einer anderen Seite führt, wenn das möglich ist.Wie würde ich ein UIPickerView einrichten?

+2

poste deinen vorläufigen Code und erkläre, wo er fehlschlägt. –

+2

Wir haben eine große Ressourcen, um im Internet zu lernen. Bevor Sie hier eine Frage stellen, müssen Sie etwas Forschung und versuchen Sie etwas und dann, wenn Sie irgendein Problem SO ist der Ort für Sie. Versuchen Sie diesen Link http: //www.iphonesdkarticles .com/2009/01/uipickerview-creating-simple-picker.html. –

+0

möglich Duplikat von [iPhone UIPickerView in UIViewController] (http://stackoverflow.com/questions/2250063/iphone-uipickerview-in-uiviewcontroller) –

Antwort

35

Es ist offensichtlich für jeden Anfänger, dass es etwas mühsam ist, diese Dinge beim ersten Mal zu verstehen.

Wie auch immer, wissen Sie, wie man UITableView s verwendet? Können Sie UITableViewDelegate und UITableViewDataSource verwenden? Wenn Ihre Antwort ja ist, dann stellen Sie sich einfach vor UIPickerView s sind wie UITableView s (aber denken Sie daran, sie sind nicht UITableViewController s).

Lassen Sie uns sagen, ich habe ein UIPickerView:

UIPickerView *objPickerView = [UIPickerView new]; // You need to set frame or other properties and add to your view...you can either use XIB code... 

1) Zuerst müssen Sie die delegate und dataSource zum UIPickerView entweder über IB oder Code zuweisen. Es hängt von der jeweiligen Implementierung (also dieser Schritt sieht sehr ähnlich einem UITableView, nicht wahr?)

So:

objPickerView.delegate = self; // Also, can be done from IB, if you're using 
objPickerView.dataSource = self;// Also, can be done from IB, if you're using 

2) Als nächstes Sie mehrere Abschnitte definieren müssen, wie diese :

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView { 
    return 1; // Or return whatever as you intend 
} 

2) Dann müssen Sie die Anzahl der Zeilen, die Sie brauchen, um zu definieren:

- (NSInteger)pickerView:(UIPickerView *)thePickerView 
numberOfRowsInComponent:(NSInteger)component { 
    return 3;//Or, return as suitable for you...normally we use array for dynamic 
} 

3) Dann definieren, Titel für Zeile (Und wenn Sie mehr Schnitt haben, dann Titel für jeden Abschnitt):

- (NSString *)pickerView:(UIPickerView *)thePickerView 
      titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    return [NSString stringWithFormat:@"Choice-%d",row];//Or, your suitable title; like Choice-a, etc. 
} 

4) Als nächstes müssen Sie das Ereignis erhalten, wenn jemand ein Element klickt (Wie Sie navigieren mögen anderer Controller/Bildschirm):

- (void)pickerView:(UIPickerView *)thePickerView 
     didSelectRow:(NSInteger)row 
     inComponent:(NSInteger)component { 

//Here, like the table view you can get the each section of each row if you've multiple sections 
    NSLog(@"Selected Color: %@. Index of selected color: %i", 
    [arrayColors objectAtIndex:row], row); 

    //Now, if you want to navigate then; 
    // Say, OtherViewController is the controller, where you want to navigate: 
    OtherViewController *objOtherViewController = [OtherViewController new]; 
    [self.navigationController pushViewController:objOtherViewController animated:YES]; 

} 

Das ist die Implementierung, die Sie benötigen.

4

Ein UIPickerView verwendet einen ähnlichen Part wie ein UITableView. DataSource und Delegate Protokoll.

Die Methoden DataSource werden verwendet, um dem Kommissionierer mitzuteilen, wie viele 'Spalten' und wie viele 'Zeilen' in Ihrem Picker vorhanden sind.
Während die Delegate Methoden sind für den Rest, Höhe der Zeilen, Breite der Spalten, Ansichten oder Titel anzuzeigen und einen Rückruf, wenn der Pflücker verschoben wurde.
UIPickerView

8

Ich werde kurz erklären, wie das erreichen programmatisch

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    UIPickerView * picker = [UIPickerView new]; 
    picker.delegate = self; 
    picker.dataSource = self; 
    picker.showsSelectionIndicator = YES; 
    [self.view addSubview:picker]; 
} 

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    return 1; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return 3; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    NSString * title = nil; 
    switch(row) { 
      case 0: 
       title = @"a"; 
       break; 
      case 1: 
       title = @"b"; 
       break; 
      case 2: 
       title = @"c"; 
       break; 
    } 
    return title; 
} 

Grundsätzlich im viewDidLoad wir schaffen und eine UIPickerView zu der Ansicht hinzufügen, es zu sagen, dass unser Controller sowohl als delegate und dataSource dient (können Sie auch tut dies im Interface Builder)

Dann werden wir zwei Datenquelle Methoden, um die Umsetzung zu sagen, wie viele Komponenten und wie viele Zeilen pro Komponenten der picker hat jeweils numberOfComponentsinPickerView: und pickerView:numberOfRowsInComponent:

Schließlich implementieren wir die Delegate-Methode pickerView:titleForRow:forComponent:, die den Inhalt jeder Zeile zurückgibt.

Wenn Sie das Verhalten anpassen möchten, wenn eine Zeile ausgewählt wurde, können Sie die Delegate-Methode pickerView:didSelectRow:inComponent: implementieren, die - wie der Name schon sagt - jedes Mal aufgerufen wird, wenn eine Zeile ausgewählt wird.

+0

Vergessen Sie nicht, den Rahmen festzulegen. –

Verwandte Themen