- ベストアンサー
【iOS】pickerViewを隠すには?
- 画面のどこかをタップすることでpickerViewを隠す方法
- TextFieldの代わりにピッカーを出す方法
- UIPickerViewを使用して選択肢を表示し、テキストフィールドの入力ビューとして設定する方法
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あなたがやりたいであろうことを、いちからプログラムしてみました。あなたの書いたコードを添削したわけではありません。 ViewController.h ------------ #import <UIKit/UIKit.h> @interface ViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> @end ViewController.m ------------ #import "ViewController.h" @interface ViewController () @property (retain, nonatomic) IBOutlet UITextView *myTextView; @end @implementation ViewController { NSMutableArray *datas; } - (void)viewDidLoad { [super viewDidLoad]; datas = [[NSMutableArray alloc] initWithObjects: @"ABC", @"DEF", @"GHI", @"JKL", nil]; UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame: CGRectMake(0.0, 0.0, 320.0, 200.0)]; pickerView.showsSelectionIndicator = YES; pickerView.dataSource = self; pickerView.delegate = self; UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame: CGRectMake(0.0, 0.0, 320.0, 42.0)]; UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemDone target: self action: @selector(addString:)]; toolBar.items = [NSArray arrayWithObject: buttonItem]; _myTextView.inputView = pickerView; _myTextView.inputAccessoryView = toolBar; [toolBar release]; [buttonItem release]; [pickerView release]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)dealloc { [_myTextView release]; [datas release]; [super dealloc]; } // PickerView Delegates and Datasources - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 1; } - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { return datas.count; } - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { return [datas objectAtIndex:row]; } // Barbutton Item Action - (void)addString: (id)sender { UIPickerView *pickerView = (UIPickerView *)(_myTextView.inputView); _myTextView.text = [_myTextView.text stringByReplacingCharactersInRange: [_myTextView selectedRange] withString: [datas objectAtIndex: [pickerView selectedRowInComponent: 0]]]; [_myTextView resignFirstResponder]; } @end あなたのコードといちばん大きな違いは、アクセサリービューを設けて、そこに入力(Done)ボタンを付けたことです。ピッカーを回して、いちどで入力したいアイテムで止められるわけではないので、ピッカーを回して、Doneボタンで入力というインターフェイスにしました。 そのDoneボタンのアクションメソッドの中にピッカービューを隠すメソッド([_myTextView resignFirstResponder];)を書いています。 あなたのコードと比較しながら、目を通してもらえれば、幸いです。
その他の回答 (1)
隠すって。隠しても意味ないですが。 UITextField で、4択のUIPickerViewをカスタムインプットにして、選択し終わったら、UIPickerViewをくろずするのでしょ。 そのためには、UIPickerViewだけでは、クローズのボタンがないので、 UITextField.inputAccessoryView に、ボタン付きのUIViewか、UIToolBarをせっていします。 cf http://works.sabitori.com/2011/06/18/add-button-to-keyboard/ ボタンがおされて、pickerViewをクローズするには、 textfield に、resignFirstResponder を送るか、別のTextFieldに、becomeFirstResponder を送ります。
お礼
UITextField.inputAccessaryViewに設定することで解決しました。 私の言葉足らずな文章を補っていただき感謝しています。 参考になるアドバイスをありがとうございました!
お礼
まったく新しいコードを書いていただき、大変参考になりました。 おっしゃる通りアクセサリービューを設けることで解決しました。 ありがとうございました!