UITextFieldへの入力時にキーボードではなくUIPickerViewを出す方法
普通はキーボードがニュッと出てくるところを、ピッカー出すようにします。
(某アプリのクレジットカード対応でカードの有効期限入力するところで用いました)
ものすごくシンプルに書くと、
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { // Show UIPickerView return NO; }
こういうことになります。
textFieldShouldBeginEditing:というUITextFieldのデリゲートメソッドでNOを返すことで、キーボードが出なくなります。
ピッカー出すところまで書くならこんな感じ。
- (void)showPicker { // ピッカーが下から出るアニメーション [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.4]; [UIView setAnimationDelegate:self]; picker.center = CGPointMake(160, SHOW_TARGET); [UIView commitAnimations]; // 右上にdoneボタン if (!self.navigationItem.rightBarButtonItem) { UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)]; [self.navigationItem setRightBarButtonItem:doneButton animated:YES]; [doneButton release]; } } - (void)hidePicker { // ピッカーが下に隠れるアニメーション [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.4]; [UIView setAnimationDelegate:self]; picker.center = CGPointMake(160, HIDE_TARGET); [UIView commitAnimations]; // doneボタンを消す [self.navigationItem setRightBarButtonItem:nil animated:YES]; } - (void)done:(id)sender { // ピッカーしまう [self hidePicker]; // doneボタン消す [self.navigationItem setRightBarButtonItem:nil animated:YES]; } - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { // ピッカー表示開始 [self showPicker]; return NO; }