web-dev-qa-db-ja.com

UIPickerViewはどのように設定しますか?

choice achoice bchoice cなどの選択肢を持つようにUIPickerViewを設定しています。私はApple=からのサンプルコードを解釈しようとしましたが、私のような初心者には理解するのが非常に難しいようです。また、ピッカービューから選択して別のページに移動することもできます。可能です。

14
Nikita Jerschow

初心者にとって、これらのことを最初に理解するのが面倒なことは明らかです。

とにかく、UITableViewsの使い方を知っていますか? UITableViewDelegateUITableViewDataSourceの使い方を知っていますか?答えが「はい」の場合、UIPickerViewsがUITableViewsに似ていると想像してください(ただし、UITableViewControllersではないことに注意してください)。

たとえば、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)最初にdelegatedataSourceを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];

}

それがあなたが必要とするすべての実装です。

46
Mohit_Jaiswal

プログラムでそれを達成する方法を簡単に説明します

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

基本的にviewDidLoadUIPickerViewを作成してビューに追加し、コントローラーがdelegatedataSourceの両方として機能することを伝えます(これもInterface Builderで)

次に、2つのデータソースメソッドを実装して、pickerViewのコンポーネント数とコンポーネントあたりの行数をそれぞれnumberOfComponentsinPickerView:pickerView:numberOfRowsInComponent:に通知します。

最後に、すべての行の内容を返すデリゲートメソッドpickerView:titleForRow:forComponent:を実装しています。

行が選択されたときの動作をカスタマイズする場合は、デリゲートメソッドpickerView:didSelectRow:inComponent:を実装できます。これは、名前が示すように、行が選択されるたびに呼び出されます。

9

UIPickerViewは、UITableViewに使用するものと同様のpartenを使用します。 DataSourceおよびDelegateプロトコル。

DataSourceメソッドは、ピッカーにある「列」の数と「行」の数をピッカーに伝えるために使用されます。
Delegateメソッドは残りの部分ですが、行の高さ、列の幅、ビューまたはタイトルを表示し、ピッカーが移動したときにコールバックします。
IPickerView

4
Vincent Bernier