Iphone 一个带有多个UITextFields的UIPicker保存选择器位置
我有一个视图,它有5个Iphone 一个带有多个UITextFields的UIPicker保存选择器位置,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,我有一个视图,它有5个UITextFields,其中显示了UIPickerView的一个实例。问题在于,选择器指示器希望始终从上一个文本字段停止的数组位置开始。例如,我有2个阵列1猫,狗,马和2房子,谷仓,学校。如果我选择第一个文本字段并选择dog,当我单击第二个文本字段时,指示器视图从barn开始。目前,我只是将其设置为动画设置为每个数组的位置0,但是有没有一种方法可以让它们从数组中的位置0开始,然后使用UIPicker的一个实例保存每个数组的位置?谢谢 编辑:很抱歉,我的语法阻止我的一些问题
UITextFields
,其中显示了UIPickerView
的一个实例。问题在于,选择器指示器希望始终从上一个文本字段停止的数组位置开始。例如,我有2个阵列1猫,狗,马和2房子,谷仓,学校。如果我选择第一个文本字段并选择dog,当我单击第二个文本字段时,指示器视图从barn开始。目前,我只是将其设置为动画设置为每个数组的位置0,但是有没有一种方法可以让它们从数组中的位置0开始,然后使用UIPicker的一个实例保存每个数组的位置?谢谢
编辑:很抱歉,我的语法阻止我的一些问题显示从选择器中选择行时,使用两个int-iVar保存选择器的索引
int a,b;
BOOL isArray1IsUsedInPicker;
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if(isArray1IsUsedInPicker)
a=row;
else
b=row;
}
当您根据数组重新加载选择器时,相应地调整BOOL变量
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
// your code ---
// set isArray1IsUsedInPicker = YES; if going to use array1 else set NO
[picker reloadComponent];
if(isArray1IsUsedInPicker)
[picker selectRow:a inComponent:0 animated:NO];
else
[picker selectRow:b inComponent:0 animated:NO];
}
以一个
BOOL
变量为例
BOOL Array1;
在viewDidLoad:
方法中设置此变量值
Array1 = YES;//or set NO which you want...
之后,在textfielddebeginediting
方法中,只需将此BOOL
变量值设置为true和false,然后重新加载UIPickerView
,如下所示
-(void)textFieldDidBeginEditing:(UITextField *)textField{
if (textField == textField1) {
Array1 = YES;
}
else {
Array1 = NO;
}
[yourPickerView reloadAllComponents];
}
使用下面的代码和本例中的逻辑
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component {
if (Array1) {
return [array1 count];
}
else{
return [array2 count];
}
}
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
if (Array1) {
return [array1 objectAtIndex:row];
}
else{
return [array2 objectAtIndex:row];
}
}
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
if (Array1) {
textField1.text = [array1 objectAtIndex:row];
}
else{
textField2.text = [array2 objectAtIndex:row];
}
}
我不清楚你的问题。请用代码做更多的描述:)
[yourPicker reloadAllComponents]
试试看,我不确定有多少代码会有帮助,但我会尽力解释得更好:)我有多个文本字段,它们会显示UIPicker的一个实例。每次更改数组时,我都使用[pickr selectRow:0不完整:0动画:是]
这样选择器就位于我数组中的第一个项,因为如果我没有选择,选择器将选择我以前选择的位置。我想做的是,如果用户单击上一个文本字段,我希望他们之前选择的数组项被选中,而不是该数组的第一项(这是因为我上面的代码)。更好的感觉?