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


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

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


😼 サンプル

🎉 ヘッダファイル

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

@interface ViewController : UIViewController
@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

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍