Вот как я бы это сделал:
Сначала определите несколько разных сборщиков.Конечно, вы используете тот же UIPickerView
, но вы меняете одно свойство, которое помогает вам их различать.Есть разные данные для (почти) каждого текстового поля.Одно удобное свойство, разработанное Apple именно для этой цели, - tag
, произвольное целое число, доступное каждому UIView
.Вы можете назначить те же теги для UITextField
s.
Например:
#define kFirstTextField 101
#define kSecondTextField 102
#define kThirdTextField 103
//... etc
В методе при касании текстового поля:
[myPickerView setHidden:NO]; // or however you show the picker
[myPickerView setTag:textField.tag];
[myPickerView reloadAllComponents];
В методах данных средства выбора:
-(NSString *)pickerView:(UIPickerView *)thePickerview
titleForRow:(NSInteger)row
forComponent:(NSInteger)component
{
if (thePickerView.tag==kFirstTextField)
{ return [list1 count]; }
if (thePickerView.tag==kSecondTextField)
{ return [anotherOrTheSameList count]; }
// of course, you can also use a switch statement
return [defaultList count];
}
Сделайте что-то подобное в методе titleForRow:
.
Наконец, когда что-то выбрано, снова различайте по тегу:
-(void) pickerView:(UIPickerView *)thePickerview
didSelectRow:(NSInteger)row
inComponent:(NSInteger)component
{
UITextField *field = (UITextField *) [thePickerview.superview viewWithTag:thePickerview.tag];
// this assumes the UIPickerView is the subview of the same view as the UITextFields
if (thePickerview.tag==kFirstTextField)
{ field.text = [list1 objectAtIndex:row]; }
if (thePickerview.tag==kSecondTextField)
{ field.text = [anotherOrTheSameList objectAtIndex:row]; }
// etc.
// alternatively:
field.text = [self pickerView:thePickerview titleForRow:row forComponent:0];
}