我正在使用一个基于核心数据的应用程序,它使用EditingViewController来控制从用户获取输入的许多不同UI元素,这些元素描述随后存储在我的应用程序中的对象的属性。 EditingViewController.xib文件包含诸如datePicker,textField,numberSlider以及我的问题来自UIPickerView的元素,这些元素都使用.hidden = YES/NO;
表达式在一个视图中控制。我的问题是我需要在两个单独的屏幕中填充UIPickerView,这需要有两个不同的NSMutableArray源。在我的viewDidLoad方法中,我设置了我的第一个NSMutableArray:
listOfItems = [[NSMutableArray alloc] init];
[listOfItems addObject:@"Greenland"];
[listOfItems addObject:@"Switzerland"];
[listOfItems addObject:@"Norway"];
[listOfItems addObject:@"New Zealand"];
[listOfItems addObject:@"Greece"];
[listOfItems addObject:@"Rome"];
[listOfItems addObject:@"Ireland"];
然后,我使用以下代码填充我的UIPickerView *选择器:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)picker;
{
return 1;
}
- (void)pickerView:(UIPickerView *)picker didSelectRow:(NSInteger)row inComponent: (NSInteger)component
{
label.text= [listOfItems objectAtIndex:row];// The label is simply setup to show where the picker selector is at
}
- (NSInteger)pickerView:(UIPickerView *)picker numberOfRowsInComponent:(NSInteger)component;
{
return 8;//[listOfItems count];
}
- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent: (NSInteger)component;
{
return [listOfItems objectAtIndex:row];
}
这适用于第一个属性和数组。那么之后,当选择了不同的uitableviewcell时,隐藏选择器picker.hidden = YES;
并且我需要另一个选择器,picker2显示不同的信息数组。但是当我尝试复制这个过程时,通过设置一个全新的选择器,调用它为picker2,并尝试使用我在第一个旁边创建的不同NSMutableArray填充它(同样,因为在我的EditingViewController中它是全部的一部分)相同的视图,只是根据视图调用不同的UI元素)我不能让picker2填充新的数组。我不知道如何设置它以便可以填充我的两个不同的数组。我需要两个选择器视图吗?可以只用一个吗? - (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent: (NSInteger)component;
方法中的正确语法是什么使两个数组单独可见?我希望有人可以帮我解决这个问题,提前谢谢你!
答案 0 :(得分:3)
您要求使用与两个选择器的委托相同的对象。
在每个委托方法中,为此目的提供了选择器作为第一个参数。您可以检查传入的选择器并返回该选择器的相应数据。
例如,如果为名为“pickerOne”的第一个选择器添加属性,而第二个可变数组称为“arrayTwo”,则委托方法将如下所示:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)picker;
{
return 1; // assuming both pickers only have 1 component
}
- (void)pickerView:(UIPickerView *)picker didSelectRow:(NSInteger)row inComponent: (NSInteger)component
{
// The label is simply setup to show where the picker selector is at
if (picker == self.pickerOne) {
label.text= [listOfItems objectAtIndex:row];
} else {
label.text= [arrayTwo objectAtIndex:row];
}
}
- (NSInteger)pickerView:(UIPickerView *)picker numberOfRowsInComponent:(NSInteger)component;
{
if (picker == self.pickerOne) {
return [listOfItems count];
} else {
return [arrayTwo count];
}
}
- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent: (NSInteger)component;
{
if (picker == self.pickerOne) {
return [listOfItems objectAtIndex:row];
} else {
return [arrayTwo objectAtIndex:row];
}
}
此外,您可以像这样填充数组(如果您只有一个静态的字符串列表,则数组不需要是可变的):
listOfItems = [[NSArray alloc] initWithObjects:@"Baptisms",@"Greenland",@"Switzerland",@"Norway",@"New Zealand",@"Greece",@"Rome",@"Ireland",nil];