Ios 如何为uipickerviews提供多个数据阵列?

Ios 如何为uipickerviews提供多个数据阵列?,ios,swift,uipickerview,Ios,Swift,Uipickerview,我要完成的是:我有5个不同的UITextField。我希望用户能够使用UIPickerviews填写这些字段。我还希望每个pickerviews都有不同的范围和/或值类型,以便为每个文本字段选择 我尝试过使用多个pickerviews来实现这一点,每个textfield使用switch语句使用不同的数组。然而,我不认为这是实现这一点的最有效的方法。有没有人能解释一下为pickerviews实现不同数据阵列的最佳实践 只需一个PickerView,您就可以通过以下代码实现您正在做的事情 -(NSI

我要完成的是:我有5个不同的UITextField。我希望用户能够使用UIPickerviews填写这些字段。我还希望每个pickerviews都有不同的范围和/或值类型,以便为每个文本字段选择


我尝试过使用多个pickerviews来实现这一点,每个textfield使用switch语句使用不同的数组。然而,我不认为这是实现这一点的最有效的方法。有没有人能解释一下为pickerviews实现不同数据阵列的最佳实践

只需一个PickerView,您就可以通过以下代码实现您正在做的事情

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    switch (pickerSelected) {

        case LANGUAGE:
            return [languageArray count];
            break;
        case GENDER:
            return [genderArray count];
            break;
        case COUNTRY:
            return [countryArray count];
            break;
        case CITY:
            return [cityArray count];
            break;

        default:
            return 0;
            break;
    }

    return 0;
}
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    switch (pickerSelected) {

        case LANGUAGE:
            return [languageArray objectAtIndex:row];
            break;
        case GENDER:
            return [genderArray objectAtIndex:row];
            break;

        case COUNTRY:
            return [[countryArray objectAtIndex:row] countryName];
            break;

        case CITY:
            return [cityArray objectAtIndex:row];

        default:
            return @"";
            break;
    }

    return nil;
}
  • 其中,
    languageArray
    genderArray
    countryArray
    代表您的 不同阵列

  • pickerSelected
    可以是
    enum
    int
    值,您可以根据不同的UITextField设置。 每个UITextField对于PickerView都有唯一的值


只需一个PickerView,您就可以通过以下代码实现您正在做的事情

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    switch (pickerSelected) {

        case LANGUAGE:
            return [languageArray count];
            break;
        case GENDER:
            return [genderArray count];
            break;
        case COUNTRY:
            return [countryArray count];
            break;
        case CITY:
            return [cityArray count];
            break;

        default:
            return 0;
            break;
    }

    return 0;
}
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    switch (pickerSelected) {

        case LANGUAGE:
            return [languageArray objectAtIndex:row];
            break;
        case GENDER:
            return [genderArray objectAtIndex:row];
            break;

        case COUNTRY:
            return [[countryArray objectAtIndex:row] countryName];
            break;

        case CITY:
            return [cityArray objectAtIndex:row];

        default:
            return @"";
            break;
    }

    return nil;
}
  • 其中,
    languageArray
    genderArray
    countryArray
    代表您的 不同阵列

  • pickerSelected
    可以是
    enum
    int
    值,您可以根据不同的UITextField设置。 每个UITextField对于PickerView都有唯一的值


根据需要选择一个可变或不可变的数组,并在.m文件中声明textField

使用TextField委托方法:

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    {
      currentText=textField;
    if (textField==yourTextfield)
    {
        arrCurrent=YourCurrentArray;
        [yourTextfield setInputView:pickerObj];
        [pickerObj setBackgroundColor:[UIColor whiteColor]];
        [yourTextfield setInputAccessoryView:toolObj];
        [self pickerView:pickerObj didSelectRow:[pickerObj selectedRowInComponent:0] inComponent:0];

    }
    else if (textField==yourTextfield2)
    {
        arrCurrent=YourCurrentArray2;
        [yourTextfield2 setInputView:pickerObj];
        [pickerObj setBackgroundColor:[UIColor whiteColor]];
        [yourTextfield2 setInputAccessoryView:toolObj];
        [self pickerView:pickerObj didSelectRow:[pickerObj selectedRowInComponent:0] inComponent:0];

    }
    }
在pickerView委托中:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:
(NSInteger)row inComponent:(NSInteger)component
{

        [currentText setText:[arrCurrent objectAtIndex:row]];

}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:
(NSInteger)row forComponent:(NSInteger)component
{
    return [arrCurrent objectAtIndex:row];

}

希望对您有所帮助:)

根据需要选择一个可变或不可变的数组,并在.m文件中声明textField

使用TextField委托方法:

    - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
    {
      currentText=textField;
    if (textField==yourTextfield)
    {
        arrCurrent=YourCurrentArray;
        [yourTextfield setInputView:pickerObj];
        [pickerObj setBackgroundColor:[UIColor whiteColor]];
        [yourTextfield setInputAccessoryView:toolObj];
        [self pickerView:pickerObj didSelectRow:[pickerObj selectedRowInComponent:0] inComponent:0];

    }
    else if (textField==yourTextfield2)
    {
        arrCurrent=YourCurrentArray2;
        [yourTextfield2 setInputView:pickerObj];
        [pickerObj setBackgroundColor:[UIColor whiteColor]];
        [yourTextfield2 setInputAccessoryView:toolObj];
        [self pickerView:pickerObj didSelectRow:[pickerObj selectedRowInComponent:0] inComponent:0];

    }
    }
在pickerView委托中:

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:
(NSInteger)row inComponent:(NSInteger)component
{

        [currentText setText:[arrCurrent objectAtIndex:row]];

}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:
(NSInteger)row forComponent:(NSInteger)component
{
    return [arrCurrent objectAtIndex:row];

}

希望对您有所帮助:)

如果每个数组中的对象类型不同&无法从单个属性检索到标题,该怎么办?@Piyushharma它仅适用于textField,因为只有textField提供了添加inputview。。。。乔布斯写道,他正在使用5个文本字段,我建议他这样做。我刚才给了tftitle gor一个例子,他还写道“我还希望每个pickerviews都有不同的范围和/或类型的值供每个文本字段选择”。这意味着每个textfield的数组类型将不同,当然它会改变。您需要存储在当前数组中@PiyushSharma@PiyushSharma我更新了我的答案,希望你的误解得到解决。如果每个数组中的对象类型不同&无法从单个属性检索到标题,该怎么办?@piyusharma它只适用于textField,因为只有textField提供了添加inputview。。。。乔布斯写道,他正在使用5个文本字段,我建议他这样做。我刚才给了tftitle gor一个例子,他还写道“我还希望每个pickerviews都有不同的范围和/或类型的值供每个文本字段选择”。这意味着每个textfield的数组类型将不同,当然它会改变。您需要存储在当前数组中@PiyushSharma@PiyushSharma我更新我的答案,希望你的误解得到解决。