0

映画と俳優の配列を含むモデル オブジェクトを取得しました。同じViewControllerに2つのピッカー(1つのピッカーに映画、もう1つのピッカー)を設定しようとしています。私はまだそれがどのように機能するかを学んでいるので助けてください。

ありがとう!

私のコードは以下です...

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.


    self.model = [[MovieModel alloc] init];


    for(int i = 0; i < self.model.count; i++){
        NSString *movies = [self.model movieForIndex:i];
        NSLog(@" Movie = %@", movies);
    }

    for(int i = 0; i < self.model.count; i++){
        NSString *actors = [self.model actorForIndex:i];
        NSLog(@" Actor = %@", actors);
    }


}

// これは私が問題を抱えている場所です。ありがとう!!!

#pragma mark - Picker View Delegate

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {


    if (component == 0){

        return [self.model movieForIndex: row];

    }

    else if (component == 1){

        return [self.model actorForIndex: row];

    }

    else
        return nil;

}



#pragma mark - Picker View Data Source

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

    return 1;

}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

    return self.model.count;

}

@end
4

3 に答える 3

1

pickerViewデータ ソース メソッドに " " パラメータがあることに気付くでしょう。このパラメーターは、データを返す 2 つのピッカーのどちらかを示します。

したがって、次のように、2 つのピッカー ビューを 2 つの異なる " IBOutlet" プロパティまたは ivar (インスタンス変数) に接続するとします。

IBOutlet UIPickerView * moviePicker;
IBOutlet UIPickerView * actorPicker;

これで、データ ソース メソッドで、次のようなことができます。

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {


    if (pickerView == moviePicker){

        return [self.model movieForIndex: row];

    }

    else if (pickerView == actorPicker){

        return [self.model actorForIndex: row];

    }

    else
        return nil;

}

そして、サポートしたいデータ ソース メソッドごとに、このようなことを行います。あなたは大丈夫なはずです!

于 2013-11-03T12:49:46.327 に答える
0

まず、ViewController が UIPickerViewDataSource と UIPickerViewDelegate を実装していることを確認する必要があります。

ビューにピッカーを追加する必要があります。

UIPickerView *moviesAndActorsPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)];
[moviesAndActorsPicker setDelegate:self];
[self.view addSubview:moviesAndActorsPicker];

ピッカーには 2 つのコンポーネントがあります。1 つは映画用、もう 1 つは俳優用です。

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 2;
}

次に、各コンポーネントの行数を設定します。

    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    // differentiate which component it is
    if (component == 0) { // movies
        return movies.count;
    }
    else { // component = actors
        return actors.count;
    }
}
于 2013-11-03T12:48:55.803 に答える
0

各ピッカーにtag次のように指定できます。

self.firstPicker.tag = 1;
self.secondPicker.tag = 2;

およびdelegate methodsUIPickerView:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    if(pickerView.tag)
    return self.firstArray.count;
    else
    return self.secondArray.count;
  }

等々

于 2013-11-03T12:50:47.123 に答える