我如何为 uipickerviews 设置多个数据数组?
How can i have multiple data arrays for uipickerviews?
我想要完成的事情:我有 5 个不同的 UITextfields。我希望用户能够使用 UIPickerviews 填写这些字段。此外,我希望每个 pickerviews 都有不同范围 and/or 类型的值可供每个文本字段选择。
我试过使用 switch 语句为每个文本字段使用多个具有不同数组的 pickerview 来执行此操作。但是,我认为这不是实现它的最有效方法。有人可以阐明为 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
都有唯一的值
根据需要取一个数组可变或不可变,并在.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];
}
希望对你有所帮助.. :)
我想要完成的事情:我有 5 个不同的 UITextfields。我希望用户能够使用 UIPickerviews 填写这些字段。此外,我希望每个 pickerviews 都有不同范围 and/or 类型的值可供每个文本字段选择。
我试过使用 switch 语句为每个文本字段使用多个具有不同数组的 pickerview 来执行此操作。但是,我认为这不是实现它的最有效方法。有人可以阐明为 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 都有唯一的值
根据需要取一个数组可变或不可变,并在.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];
}
希望对你有所帮助.. :)