14

データを入力するための UITextFields が埋め込まれたテーブル ビューがあります。また、Apple の DateCell の例で示されているように、UIPickerView と UIDatePicker をポップアップする他の 2 つのフィールドもあります。

ほとんどの場合は機能しますが、テキスト フィールドのキーボードから他のピッカーにきれいに移行する方法がわかりません - 1 つがスライドして、もう 1 つがスライドします - 奇妙に見え、テーブル ビューのスクロール位置が時々めちゃくちゃになります - すべてで上からスクロールしました。

私がやりたいのは、テキスト フィールドのキーボードをアニメーション化せずに置き換えたり、テーブル ビューをフル サイズに戻したりせずに置き換えることです。

手がかりはありますか?

4

2 に答える 2

32

まず、これがどのように見えるかを示すスクリーンキャプチャです。

UITextFieldDelegateを実装し、UIPickerViewを含む「ポップアップ」を表示します。

- (void)textFieldDidEndEditing:(UITextField *)textField {

    UIPickerView *picker = [[UIPickerView alloc] 
                                 initWithFrame:CGRectMake(0, 244, 320, 270)];
    picker.delegate = self;
    picker.dataSource = self;
    [self.view addSubview:picker];
    [picker release];
}

キーボードが消えると、ピッカービューが表示されます。

これをもう少し進めたい場合は、キーボードのようにUIPickerViewの「スライドイン」をアニメーション化できます。

- (void)viewDidLoad {

    //picker exists in the view, but is outside visible range
    picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 480, 320, 270)];
    picker.delegate = self;
    picker.dataSource = self;
    [self.view addSubview:picker];
    [picker release];
}

//animate the picker into view
- (void)textFieldDidEndEditing:(UITextField *)textField {

    [UIView beginAnimations:@"picker" context:nil];
    [UIView setAnimationDuration:0.5];

    picker.transform = CGAffineTransformMakeTranslation(0,-236);
    [UIView commitAnimations];

}

//animate the picker out of view
- (void)textFieldDidBeginEditing:(UITextField *)textField {

    [UIView beginAnimations:@"picker" context:nil];
    [UIView setAnimationDuration:0.5];

    picker.transform = CGAffineTransformMakeTranslation(0,236);
    [UIView commitAnimations];
}

//just hide the keyboard in this example
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}
于 2010-01-02T01:41:19.270 に答える
29

UITextField の inputView プロパティを UIPickerView に設定するだけです。

于 2011-06-20T03:08:52.877 に答える