带有 2 个 NSMutableArrays 的 UIPickerView?

Posted

技术标签:

【中文标题】带有 2 个 NSMutableArrays 的 UIPickerView?【英文标题】:UIPickerView with 2 NSMutableArrays? 【发布时间】:2010-01-19 07:33:01 【问题描述】:

我有一个我正在开发的基于核心数据的应用程序,它使用 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 *picker:

- (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];

这适用于第一个属性和数组。 So then after that, when a different uitableviewcell is selected, the picker is hidden picker.hidden = YES; and I need to have another picker, picker2 show up with a different array of information.但是,当我尝试复制该过程时,通过设置一个全新的选择器,将其命名为 picker2,并尝试使用我在第一个旁边创建的不同 NSMutableArray 填充它(再次,这一切都是因为在我的 EditingViewController 中,它都是一部分相同的视图,只是根据视图调用不同的 UI 元素)我无法让 picker2 填充新数组。我不知道如何设置它以便可以填充我的两个不同的数组。我需要两个选择器视图吗?可以只用一个吗? - (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent: (NSInteger)component; 方法中使两个数组分别可见的正确语法是什么?我希望有人能帮助我解决这个问题,在此先感谢您!

【问题讨论】:

【参考方案1】:

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

在每个委托方法中,选择器都作为第一个参数提供。您可以检查传入的是哪个选择器,并为该选择器返回适当的数据。

例如,如果您为第一个选择器添加一个名为“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];

【讨论】:

以上是关于带有 2 个 NSMutableArrays 的 UIPickerView?的主要内容,如果未能解决你的问题,请参考以下文章

存储少量 NSMutableArrays(使用 plist)?

使用不同的 NSMutableArrays 加载 UITableView

如何创建一个包含许多 NSMutableArrays 的 NSMutableDictionary

使用 NSData 和 NSMutableArrays 保存 OS X 游戏数据

是否可以将带有 NSKeyedArchiver 的 NSMutableArray 保存到核心数据中?

存储和检索多维 NSMutableArrays 的最佳方法是啥?