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?
Odpowiedz
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.
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
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.
Nie zapomnij ustawić ramkę. –
opublikuj swój próbny kod i wyjaśnij, gdzie nie działa. –
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. –
możliwe duplikat [iPhone UIPickerView w UIViewController] (http://stackoverflow.com/questions/2250063/iphone-uipickerview-in-uiviewcontroller) –