-3

UITextFieldsの1つのインスタンスを表示する5つのビューがありますUIPickerView。問題は、セレクターインジケーターが常に前のテキストフィールドが中断した配列位置から開始することを望んでいることです。たとえば、猫、犬、馬、家、納屋、学校の2つのアレイがあります。最初のテキストフィールドを選択して犬を選択した場合、2番目のテキストフィールドをクリックすると、インジケータービューが納屋から始まります。現在、各配列の位置0にアニメーション化するように設定していますが、それぞれを配列の0位置から開始し、UIPickerの1つのインスタンスを使用して各配列の位置を保存する方法はありますか?ありがとう!

編集:申し訳ありませんが、私の構文により、質問の一部が表示されません

4

2 に答える 2

1

ピッカーから行を選択する際に、ピッカーのインデックスを保存するために 2 つの 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];

     }
于 2013-01-08T06:43:40.170 に答える
0

BOOLたとえば、変数を1つだけ取ります...

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]; 
    }
}
于 2013-01-08T06:46:31.227 に答える