【问题标题】:Multiple textfield with single picker view in IOSIOS中具有单个选择器视图的多个文本字段
【发布时间】:2016-05-06 05:31:51
【问题描述】:

我是 IOS 新手,我想以编程方式只用一个选择器创建多个文本字段。假设我需要五个文本字段意味着如果我单击第一个文本字段选择器视图可以加载第一个数组然后我转到第二个文本字段意味着选择器视图可以自动加载第二个数组并继续到最后一个字段和数组。请根据我的给我想法和建议问题。

【问题讨论】:

  • 实现 Textfield 委托和更改选择器数组重新加载选择器视图解决您的问题
  • 任何细节编码@PKT
  • 昨天我回答你的问题是不行的
  • 不工作@Anbu.Karthik

标签: ios tags uipickerview


【解决方案1】:

按照这些步骤来实现您的目标。

  1. 从给定链接下载以下通用类:

    LabeledPickerView.h

    LabeledPickerView.m

  2. 将这个类复制到您的项目中,并将 "LabeledPickerView.h" 导入到您的 ViewController.h 文件中。另外,添加 UIPickerViewDataSourceUIPickerDelegateUITextFieldDelegate

  3. 现在,使用以下方法初始化 Picker:-

    -(LabeledPickerView *)GetPickerViewWithTag:(int)Tag {
    
       LabeledPickerView *pickerView = [[LabeledPickerView alloc] init];
    
       pickerView.dataSource = self;
    
       pickerView.delegate = self;
    
       pickerView.tag = Tag;
    
       pickerView.backgroundColor = [UIColor whiteColor];
    
       pickerView.showsSelectionIndicator = YES;
    
       return pickerView;
    
    }
    

    此方法将返回 PickerView 的属性。

  4. 现在,我们将使用 UIPickerView 委托和数据源方法向其中添加数据,如下所示:-

    //Based on the text fields tags, you can populate the data in PickerView.
    -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    
         return 1;     //Returns components in PickerView. Change with switch - case statement if you want more components in any of the text fields.
    }
    
    -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {     
    
        int tag = (int)((UIPickerView *)pickerView).tag;
        switch (tag) {
              case 10: {
                 if (YourArray.count > 0) {
                     return [YourArray count];
                 }
                 else {
                     return 0;
                 }
                 break;
              }
              default:
              break;
        }
        return 0;
    }
    
    -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    
        int tag = (int)((UIPickerView *)pickerView).tag;
        switch (tag) {
              case 10: {
                if ([YourArray count] > 0) {
                    return [YourArray objectAtIndex:row];
                }
                else {
                    return @"";
                }
                break;
             }
             default:
             break;
         }
         return @"";
     }
    
    -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    
          int tag = (int)((UIPickerView *)pickerView).tag;
          switch (tag) {
                case 10: {
                    if ([YourArray count] > 0) {
                      YourTextField.text = [YourArray objectAtIndex:row];
                }
                else {
                      txtCity.text = @"";
                }
                break;
          }
          default:
          break;
       }
     }
    
  5. 现在,开始编辑时打开 Picker,如下所示:

    -(void)textFieldDidBeginEditing:(UITextField *)textField {
        if (textField == firstTextField) {
            LabeledPickerView *picker = [self GetPickerViewWithTag:10];  //Change tag as text field changes..
            textField.inputView = picker;  
            [picker selectRow:0 inComponent:0 animated:YES];
            [self pickerView:picker didSelectRow:0 inComponent:0];
         }
    }
    

在此方法中添加尽可能多的文本字段。不要忘记为每个文本字段分配不同的标签。

通过使用上面的代码,您可以使用带有多个文本字段的单个选择器视图。

快乐编码..!!

【讨论】:

  • 我对代码做了一些小的改动。请尝试使用此更新后的代码。
【解决方案2】:

也许这会对你有所帮助,

我在我的项目中完成了相同的代码并且它工作正常。这里我给你三个文本字段的代码。

    NSMutableArray *pickerTitleData, *pickerCityData, *pickerStateData;
@property (strong, nonatomic) IBOutlet UItextfield *txtTitle;
@property (strong, nonatomic) IBOutlet UItextfield *txtTitle;
@property (strong, nonatomic) IBOutlet UItextfield *txtTitle;
    UIPickerView *TitleSelect,*CitySelect, *StateSelect;




for address type
        pickerTitleData =[[NSMutableArray alloc]initWithObjects:@"Home",@"Office",@"Other", nil];

        TitleSelect = [[UIPickerView alloc]init];
        TitleSelect.dataSource = self;
        TitleSelect.delegate = self;
        TitleSelect.showsSelectionIndicator = YES;
        txtTitle.inputView = TitleSelect;

// same you have three other array


#pragma mark - Picker View Data source for city

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    @try
    {
        if (pickerView == TitleSelect)
        {
            return pickerTitleData.count;
        }

        else if (pickerView == CitySelect)
        {
            return pickerCityData.count;
        }

        else if (pickerView == StateSelect)
        {
            return pickerStateData.count;
        }

        return 1;
    }
    @catch (NSException *exception)
    {
        NSLog(@"exception--%@",exception.description);
    }
}

#pragma mark- Picker View Delegate for city

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    @try
    {
        if (pickerView == TitleSelect)
        {
            [txtTitle setText:[pickerTitleData objectAtIndex:row]];
        }

        else if (pickerView == CitySelect)
        {
            [txtTownOrCity setText:[pickerCityData objectAtIndex:row]];
        }

        else if (pickerView == StateSelect)
        {
            [txtState setText:[pickerStateData objectAtIndex:row]];
        }
    }
    @catch (NSException *exception)
    {
        NSLog(@"%@",exception.description);
    }
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    @try
    {
        if (pickerView == TitleSelect)
        {
            return pickerTitleData[row];
        }

        else if (pickerView == CitySelect)
        {
            return pickerCityData[row];
        }

        else if (pickerView == StateSelect)
        {
            return pickerStateData[row];
        }

        return @"";

    }
    @catch (NSException *exception)
    {
        NSLog(@"%@",exception.description);
    }
}

【讨论】:

  • 我在你的编码中有一个点,为什么所有的文本字段名称都一样? @PALAK iOS 开发者
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多