2012-12-07 11 views
9

jestem utworzenie UIPickerView mieć wyboru jak wyboru, wybór b, wybór c i tak dalej. Próbowałem zinterpretować kod przykładowy od Apple, ale wydaje się to bardzo trudne do zrozumienia dla początkującego, takiego jak ja. Chciałbym również, aby wybory z widoku próbnego przenosiły mnie na inną stronę, jeśli jest to możliwe.Jak skonfigurować UIPickerView?

+2

opublikuj swój próbny kod i wyjaśnij, gdzie nie działa. –

+2

Posiadamy ogromne zasoby do nauki w Internecie. Przed postawieniem pytania tutaj musisz zrobić kilka badań i spróbować czegoś, a następnie, jeśli napotkasz jakikolwiek problem, SO jest miejscem dla ciebie. Spróbuj tego linku http: //www.iphonesdkarticles .com/2009/01/uipickerview-creation-simple-picker.html. –

+0

możliwe duplikat [iPhone UIPickerView w UIViewController] (http://stackoverflow.com/questions/2250063/iphone-uipickerview-in-uiviewcontroller) –

Odpowiedz

35

To oczywiste dla każdego początkującego, że co jakiś nudny zrozumieć te rzeczy po raz pierwszy.

Tak czy inaczej, czy wiesz, jak korzystać z UITableView s? Czy wiesz, jak korzystać z UITableViewDelegate i UITableViewDataSource? Jeśli twoja odpowiedź brzmi "tak", to po prostu wyobraź sobie, że UIPickerView s są podobne do UITableView s (ale pamiętaj, że nie są to UITableViewController s).

Powiedzmy, Mam 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) Najpierw trzeba przypisać delegate i dataSource do UIPickerView za pośrednictwem IB lub kodu. To zależy od implementacji (Więc to krok wygląda bardzo podobnie do UITableView, prawda?)

Jak to:

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) Następnie trzeba określić liczbę sekcji, podobnie jak to :

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

2) Następnie trzeba określić liczbę wierszy, czego potrzebujesz:

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

3) Następnie Zdefiniować tytuł wiersza (A jeśli masz wiele sekcji, a następnie tytuł dla każdej sekcji):

- (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) Następnie trzeba uzyskać zdarzenia, gdy ktoś kliknie na elemencie (Jak chcesz, aby przejść do drugi kontroler/screen):

- (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]; 

} 

to wszystko wdrożenie trzeba.

4

A UIPickerView użyje partenu podobnego do tego, którego używa się dla UITableView. DataSource i Delegate protokół.

Metody są używane do informowania selektora ile "kolumn" i ile "rzędów" znajduje się w selektorze.
Podczas gdy metody Delegate są dla reszty, wysokości rzędów, szerokości kolumn, widoków lub tytułu do wyświetlenia i oddzwaniania po przesunięciu selektora.
UIPickerView

8

będę krótko wyjaśnić, jak to osiągnąć programowo

- (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; 
} 

Zasadniczo w viewDidLoad kreujemy i dodanie UIPickerView do widzenia, informując go, że nasz kontroler służy zarówno jako delegate i dataSource (można zrobić w konstruktorze Interface zbyt)

Następnie mamy dwie metody wykonawczego źródła danych, aby powiedzieć, ile komponenty i ile wierszy na komponentach pickerView ma odpowiednio numberOfComponentsinPickerView: i pickerView:numberOfRowsInComponent:

Wreszcie wdrażają metodę delegata pickerView:titleForRow:forComponent: która zwraca zawartość każdej linii.

Jeśli chcesz dostosować zachowanie po wybraniu wiersza, możesz zaimplementować metodę delegowania pickerView:didSelectRow:inComponent:, która - zgodnie z nazwą - jest wywoływana za każdym razem, gdy wybrany jest wiersz.

+0

Nie zapomnij ustawić ramkę. –