Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 一个带有多个UITextFields的UIPicker保存选择器位置_Iphone_Objective C_Ios_Xcode - Fatal编程技术网

Iphone 一个带有多个UITextFields的UIPicker保存选择器位置

Iphone 一个带有多个UITextFields的UIPicker保存选择器位置,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,我有一个视图,它有5个UITextFields,其中显示了UIPickerView的一个实例。问题在于,选择器指示器希望始终从上一个文本字段停止的数组位置开始。例如,我有2个阵列1猫,狗,马和2房子,谷仓,学校。如果我选择第一个文本字段并选择dog,当我单击第二个文本字段时,指示器视图从barn开始。目前,我只是将其设置为动画设置为每个数组的位置0,但是有没有一种方法可以让它们从数组中的位置0开始,然后使用UIPicker的一个实例保存每个数组的位置?谢谢 编辑:很抱歉,我的语法阻止我的一些问题

我有一个视图,它有5个
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动画:是]
这样选择器就位于我数组中的第一个项,因为如果我没有选择,选择器将选择我以前选择的位置。我想做的是,如果用户单击上一个文本字段,我希望他们之前选择的数组项被选中,而不是该数组的第一项(这是因为我上面的代码)。更好的感觉?