0

UITexfieldが3つあり、ユーザーは最初の2つを入力できますが、最後の1つはカテゴリフィールドであり、クリックするとUIPickerViewが表示されます。

私がこれまでに何とかしてきたことは:

  • ユーザーがカテゴリのテキストフィールドをクリックすると、ピッカービューが表示されます
  • 次に、ユーザーが別のテキストフィールドをクリックします->ピッカービューが消え、キーボードが表示されます

ただし、ユーザーがカテゴリテキストフィールドをもう一度クリックしてピッカービューを表示したときに、キーボードを非表示にしたいことを知っておいてください。

これは私がこれまでに持っているものです:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    if(textField == categoryTextField){
        [categoryTextField resignFirstResponder];
        [UIView beginAnimations:@"picker" context:nil];
        [UIView setAnimationDuration:0.3];
        pickerView.transform = CGAffineTransformMakeTranslation(0,-236);
        [UIView commitAnimations];
    }else{
        [UIView beginAnimations:@"picker" context:nil];
        [UIView setAnimationDuration:0.3];
        pickerView.transform = CGAffineTransformMakeTranslation(0,236);
        [UIView commitAnimations];
    }
}

しかし、それは機能しません。なぜだと思いますか?

4

2 に答える 2

2

あなたはそれを難し​​くしすぎています。ピッカービューをテキストフィールドの入力ビューとして設定すると、OSがアニメーションを自動的に処理します。各フィールドがファーストレスポンダーになると、適切な入力ビュー(テキストのものにはデフォルトのキーボード、3番目のものにはピッカー)が表示されます。自分でアニメーションを作成する必要はありません。

于 2012-05-12T12:00:43.137 に答える
0

あなたの問題がどこから来ているのか、私にはよくわかりません。多分あなたの翻訳はpickerViewを動かしすぎていると思います。あなたはそれを試してみるべきです:

- (void)textFieldDidBeginEditing:(UITextField *)textField {
    if(textField == categoryTextField){
        [categoryTextField resignFirstResponder];
        [UIView beginAnimations:@"picker" context:nil];
        [UIView setAnimationDuration:0.3];
        CGRect frame = pickerView.frame;
        frame.origin.y = 480 - 236; // assuming your on an iPhone and your picker appears from bottom
        pickerView.frame = frame;
        [UIView commitAnimations];
    }else{
        [UIView beginAnimations:@"picker" context:nil];
        [UIView setAnimationDuration:0.3];
        CGRect frame = pickerView.frame;
        frame.origin.y = 480; // assuming your on an iPhone and your picker disappears to bottom
        pickerView.frame = frame;
        [UIView commitAnimations];
    }
}

お役に立てば幸い

于 2012-05-12T11:39:15.317 に答える