私は、選択肢a、選択肢b、選択肢cなどの選択肢を持つようにaを設定していUIPickerView
ます。私はAppleのサンプルコードを解釈しようとしましたが、私のような初心者にとってはそれを理解するのは非常に難しいようです。また、可能であれば、ピッカービューからの選択肢で別のページに移動したいと思います。
3 に答える
すべての初心者にとって、これらのことを最初に理解するのは非常に面倒であることは明らかです。
とにかく、sの使い方を知っていますかUITableView
?と の使い方を知っていますUITableViewDelegate
かUITableViewDataSource
?答えが「はい」の場合は、UIPickerView
s が s に似ていると想像してくださいUITableView
(ただし、s ではないことに注意してくださいUITableViewController
)。
たとえば、私は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) まず、IB またはコードを介してdelegate
とdataSource
をに割り当てる必要があります。UIPickerView
それは実装に依存します (つまり、このステップは a に非常に似て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
の両方として機能することを伝えます(Interface Builder でもこれを行うことができます)。delegate
dataSource
次に、pickerView に含まれるコンポーネントの数とコンポーネントごとの行数をそれぞれ示すために、2 つのデータ ソース メソッドを実装しますnumberOfComponentsinPickerView:
。pickerView:numberOfRowsInComponent:
pickerView:titleForRow:forComponent:
最後に、すべての行の内容を返すデリゲート メソッドを実装しています。
行が選択されたときの動作をカスタマイズしたい場合はpickerView:didSelectRow:inComponent:
、その名前が示すように、行が選択されるたびに呼び出されるデリゲート メソッドを実装できます。
UIPickerView は、UITableView の使用と同様のパーテンを使用します。DataSource
とDelegate
プロトコル。
メソッドは、DataSource
ピッカーに「列」と「行」がいくつあるかをピッカーに伝えるために使用されます。
メソッドはDelegate
残り、行の高さ、列の幅、表示するビューまたはタイトル、およびピッカーが移動したときのコールバック用です。
UIPickerView