2015-10-28 70 views
1

我想要实现的是:我有5个不同的UITextfields。我希望用户能够使用UIPickerviews填写这些字段。另外,我希望每个pickerviews都有一个不同的范围和/或类型的值,可以从每个文本字段中进行选择。我怎样才能有uipickerviews多个数据数组?

我已经尝试过使用switch语句为每个文本字段使用不同数组的多个pickerviews。不过,我认为这不是实现这一目标的最有效方式。有人可以对采用不同的pickerviews数据阵列的最佳实践有所了解吗?

回答

2

你可以实现你在做什么,只用一个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; 
} 
  • languageArraygenderArraycountryArray代表你 不同阵列

  • pickerSelected能是一个enumint值,您可以根据不同的UITextField设置值。 每一个的UITextField都有独特的价值PickerView

2

以一个阵列可变或不可变按需要和文本框在.m文件声明。

使用文本字段的委托方法:

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

} 

希望能对您有所帮助.. :)

+0

如果什么对象的类型在每个不同数组和标题不能从单个属性中检索? –

+0

@PiyushSharma它只是在textField上工作,因为只有textfield提供添加inputview ....和作业写道,他正在使用5 textfield这是我建议他。我刚刚给了tftitle gor的例子。 – Meera

+0

他还写了'我也希望每个pickerviews都有不同的范围和/或不同类型的值供每个文本字段选择。这意味着数组的类型将不同,每个textField –