一个UIPicker,具有多个UITextFields保存选择器位置

时间:2013-01-08 06:24:47

标签: iphone objective-c ios xcode

我有一个视图,其中有5 UITextFields,它会调出UIPickerView的一个实例。问题是选择器指示器想要始终从前一个文本字段停止的数组位置开始。例如,我有2个阵列1猫,狗,马和2house,谷仓,学校。如果我选择第一个文本字段并选择狗,当我单击第二个文本字段时,指示器视图从谷仓开始。目前我只是将它设置为动画到每个数组的位置0,但有没有一种方法可以让它们从数组中的0位置开始,然后使用UIPicker的一个实例保存每个数组的位置?谢谢!

编辑:抱歉,我的语法阻止了我的一些问题显示

2 个答案:

答案 0 :(得分:1)

使用两个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];

     }

答案 1 :(得分:0)

只需要一个BOOL变量例如......

BOOL Array1;

viewDidLoad:方法

中设置此变量值
Array1 = YES;//or set NO which you want...

之后在textFieldDidBeginEditing方法中将此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]; 
    }
}