choice a、choice b、choice cなどの選択肢を持つようにUIPickerView
を設定しています。私はApple=からのサンプルコードを解釈しようとしましたが、私のような初心者には理解するのが非常に難しいようです。また、ピッカービューから選択して別のページに移動することもできます。可能です。
初心者にとって、これらのことを最初に理解するのが面倒なことは明らかです。
とにかく、UITableView
sの使い方を知っていますか? UITableViewDelegate
とUITableViewDataSource
の使い方を知っていますか?答えが「はい」の場合、UIPickerView
sがUITableView
sに似ていると想像してください(ただし、UITableViewController
sではないことに注意してください)。
たとえば、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)最初にdelegate
とdataSource
をIBまたはコードを介してUIPickerView
に割り当てる必要があります。これは実装によって異なります(したがって、このステップはUITableView
と非常によく似ていますね。)
このような:
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)次に、次のようにセクション数を定義する必要があります。
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
return 1; // Or return whatever as you intend
}
2)次に、必要な行数を定義する必要があります。
- (NSInteger)pickerView:(UIPickerView *)thePickerView
numberOfRowsInComponent:(NSInteger)component {
return 3;//Or, return as suitable for you...normally we use array for dynamic
}
3)次に、行のタイトルを定義します(複数のセクションがある場合は、各セクションのタイトル):
- (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)次に、誰かが要素をクリックしたときにイベントを取得する必要があります(他のコントローラー/画面に移動したい場合):
- (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];
}
それがあなたが必要とするすべての実装です。
プログラムでそれを達成する方法を簡単に説明します
- (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;
}
基本的にviewDidLoad
でUIPickerView
を作成してビューに追加し、コントローラーがdelegate
とdataSource
の両方として機能することを伝えます(これもInterface Builderで)
次に、2つのデータソースメソッドを実装して、pickerViewのコンポーネント数とコンポーネントあたりの行数をそれぞれnumberOfComponentsinPickerView:
とpickerView:numberOfRowsInComponent:
に通知します。
最後に、すべての行の内容を返すデリゲートメソッドpickerView:titleForRow:forComponent:
を実装しています。
行が選択されたときの動作をカスタマイズする場合は、デリゲートメソッドpickerView:didSelectRow:inComponent:
を実装できます。これは、名前が示すように、行が選択されるたびに呼び出されます。
UIPickerViewは、UITableViewに使用するものと同様のpartenを使用します。 DataSource
およびDelegate
プロトコル。
DataSource
メソッドは、ピッカーにある「列」の数と「行」の数をピッカーに伝えるために使用されます。Delegate
メソッドは残りの部分ですが、行の高さ、列の幅、ビューまたはタイトルを表示し、ピッカーが移動したときにコールバックします。
IPickerView