Iphone 带2个NSMutableArray的UIPickerView?

Iphone 带2个NSMutableArray的UIPickerView?,iphone,delegates,nsmutablearray,uipickerview,cocoa-design-patterns,Iphone,Delegates,Nsmutablearray,Uipickerview,Cocoa Design Patterns,我正在开发一个基于核心数据的应用程序,它使用EditingViewController控制许多不同的UI元素,这些元素从用户那里获取输入,这些输入描述了随后存储在我的应用程序中的对象的属性。EditingViewController.xib文件包含诸如datePicker、textField、numberSlider等元素,我的问题来自UIPickerView,这些元素都使用在一个视图中进行控制。hidden=YES/NO表达式。我的问题是,我需要在两个单独的屏幕中填充UIPickerView,

我正在开发一个基于核心数据的应用程序,它使用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我需要另一个选择器,选择器2显示不同的信息数组。但是,当我尝试复制该过程时,通过设置一个全新的选择器,将其称为picker2,并尝试使用我在第一个选择器旁边创建的不同NSMutableArray填充它(同样,这都是因为在我的EditingViewController中,它都是同一视图的一部分,只是根据视图调用不同的UI元素)我无法使用新数组填充picker2。我不知道如何设置它,以便填充我的两个不同阵列。我需要两个选择器视图吗?能只用一个吗?
-(NSString*)pickerView:(UIPickerView*)picker titleForRow:(NSInteger)row for component:(NSInteger)component中的正确语法是什么使两个阵列分别可见的方法?我希望有人能在这方面帮助我,提前谢谢你

您要求对两个选择器使用与委托相同的对象

在每个委托方法中,都提供了选择器作为用于此目的的第一个参数。您可以检查传入的选择器,并返回该选择器的相应数据

例如,如果为第一个选择器添加名为“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];
    }
}
此外,您可以这样填充数组(如果您只有一个静态字符串列表,那么数组不需要是可变的):


您要求对两个选择器使用与委托相同的对象

在每个委托方法中,都提供了选择器作为用于此目的的第一个参数。您可以检查传入的选择器,并返回该选择器的相应数据

例如,如果为第一个选择器添加名为“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];
    }
}
此外,您可以这样填充数组(如果您只有一个静态字符串列表,那么数组不需要是可变的):