textfieldからdatepickerを表示Doneボタン付き[Objective-C]


Objective-Cで、UITextFieldをクリックしたらDatePickerが表示されるサンプルです。ちょっと試行錯誤しましたが、でき上がるとかなりシンプルなソースです!

(8-13 10:40) 完了ボタンを追加しました!


🗻 サンプル

🏀 ヘッダファイル

ヘッダファイルにUITextFieldDelegateを追加。

@interface ViewController : UIViewController<UITextFieldDelegate>
@end

🐰 実装ファイル

実装ファイルのサンプルは以下のとおり。

- (void)viewDidLoad
{
[super viewDidLoad];
// UITextFieldの設定
CGRect rectBIR = CGRectMake(10, 345, 300, 25);
UITextField textField = [[UITextField alloc]initWithFrame:rectBIR];
// DatePickerの設定
UIDatePicker* datePicker = [[UIDatePicker alloc]init];
[datePicker setDatePickerMode:UIDatePickerModeDate];
// DatePickerを編集したら、updateTextFieldを呼び出す
[datePicker addTarget:self action:@selector(updateTextField:) forControlEvents:UIControlEventValueChanged];
// textFieldの入力をdatePickerに設定
textField.inputView = datePicker;
// Delegationの設定
textField.delegate = self;
// DoneボタンとそのViewの作成
UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init];
keyboardDoneButtonView.barStyle = UIBarStyleBlack;
keyboardDoneButtonView.translucent = YES;
keyboardDoneButtonView.tintColor = nil;
[keyboardDoneButtonView sizeToFit];
// 完了ボタンとSpacerの配置
UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:@"完了" style:UIBarButtonItemStyleBordered target:delegate action:@selector(pickerDoneClicked)];
UIBarButtonItem *spacer1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[keyboardDoneButtonView setItems:[NSArray arrayWithObjects:spacer, spacer1, doneButton, nil]];
// Viewの配置
textField.inputAccessoryView = keyboardDoneButtonView;
[self.view addSubview:textField];
}
#pragma mark DatePickerの編集が完了したら結果をTextFieldに表示
-(void)updateTextField:(id)sender {
UIDatePicker *picker = (UIDatePicker *)sender;
textField.text = [NSString stringWithFormat:@"%@", picker.date];
}
#pragma mark datepickerの完了ボタンが押された場合
-(void)pickerDoneClicked {
[_birth resignFirstResponder];
_activeField = nil;
}

🐮 参考リンク

bencoffman.com/blog - iOS, Want a “button” above a UIPicker or Keyboard, inputView, inputAccessoryView

datepicker - Iphone Display Date Picker on TextField click - Stack Overflow

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)