如何在同一视图控制器中使用 2 个不同的选取器显示 2 个不同的数组



我得到了一个包含电影和演员数组的模型对象。我正在尝试在同一视图控制器中填充 2 个选取器(一个选取器带有电影,另一个选取器带有演员)。请帮忙,因为我仍在学习它是如何工作的。

谢谢!

我的代码如下...

@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
您会

注意到数据源方法中有一个" pickerView "参数。此参数告诉您要为两个选取器中的哪一个返回数据。

因此,假设您将两个选取器视图连接到两个不同的"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;
}

并对要支持的每个数据源方法执行类似操作。 你应该没事!

首先,您需要确保 ViewController 实现 UIPickerViewDataSource 和 UIPickerViewDelegate。

您需要将选取器添加到视图中:

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

选取器有两个组件 - 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;
    }
}

您可以为每个选取器指定一个tag,如下所示:

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

UIPickerViewdelegate methods

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

等等

最新更新