我得到了一个包含电影和演员数组的模型对象。我正在尝试在同一视图控制器中填充 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;
在UIPickerView
的delegate
methods
:
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
if(pickerView.tag)
return self.firstArray.count;
else
return self.secondArray.count;
}
等等