2009-08-14 6 views
14

私はいくつかのデータを入力するためのUITextFieldを埋め込んだテーブルビューを持っています。また、AppleのDateCellの例に示すように、UIPickerViewとUIDatePickerをポップアップする2つのフィールドもあります。iPhoneキーボードをUIPickerViewにエレガントに置き換えます。

ほとんどの場合は動作しますが、テキストフィールドのキーボードから他のピッカーにすばやく移行する方法がわかりません - 1つはスライド、1つはスライド - 奇妙に見え、テーブルビューのスクロール位置がねじれてしまうことがありますすべてのものが上からスクロールされています。

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

手がかりはありますか?

答えて

31

まず、screencapture showing how this looksがあります。

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; 
} 
+0

この回答ありがとうございます。 – camilo

+12

ちょうどメモとして、これはこれを行う古い方法です。より最新のバージョンでは、textFieldのinputViewプロパティを使用します。 –

29

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

+0

良い方法ですが、ipadで正しく表示されません。 – TMB

+0

私はこの回答をチェックし、ちょうど日付ピッカースタイルに設定しません:http://stackoverflow.com/questions/4777237/iphone-datepicker-instead-of-keyboard – LordParsley

関連する問題