私はちょうどこの同じ質問を調査しました.Webにはサードパーティのライブラリとトリッキーなハックがたくさんありますが、実際には、あなたが求めていることを達成するための非常に単純で、おそらく好ましい方法があります.
まず、UITextField
inputView
およびinput accessoryView
プロパティによって提供される機能を活用し、これらを組み合わせて無限のカスタマイズの可能性を提供します。私にとっての問題は、自分が望むものを正確に得るために物事を構造化する方法を知ることでした. ここでそれらについて読むことをお勧めします:
https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/InputViews/InputViews.html
そのため、次の 2 つのプロパティを宣言することから始めました。
@property (nonatomic, strong) UIDatePicker *datePicker;
@property (nonatomic, strong) UIView *datePickerToolbar;
次に、次のようなものでそれぞれを作成しました。
- (UIView*)datePickerToolbar {
if (!_datePickerToolbar) {
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
toolbar.barStyle = UIBarStyleBlack;
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(datePickerCanceled:)];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(datePickerDone:)];
UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[toolbar setItems:[NSArray arrayWithObjects:cancelButton, space, doneButton, nil] animated:NO];
_datePickerToolbar = toolbar;
}
return _datePickerToolbar;
}
- (UIDatePicker*)datePicker {
if (!_datePicker) {
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.datePickerMode = UIDatePickerModeDate;
datePicker.date = [NSDate date];
_datePicker = datePicker;
}
return _datePicker;
}
もちろん、ニーズに合わせてこれらのビューをカスタマイズできます。ただし、これらのビューは独自のものであるため、ツールバーの各ボタンが相互作用を処理する方法も決定する必要があります。どちらも「キーボード」を閉じる必要がありますが (これはファーストレスポンダーを辞任することによって行われます)、私の場合は、[完了] ボタンで日付入力フィールドを選択した日付の書式設定された文字列に設定することも必要でした:
- (void)datePickerCanceled:(id)sender {
// just resign focus and dismiss date picker
[self.dateOfBirthField resignFirstResponder];
}
- (void)datePickerDone:(id)sender {
NSDate *selectedDate = self.datePicker.date;
// format date into string
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
// format overall string
NSString *dateString = [dateFormatter stringFromDate:selectedDate];
self.dateInputField.text = dateString;
[self.dateOfBirthField resignFirstResponder];
}
その後、キーボードの置き換えをトリガーするために残された唯一のことは、カスタム ビューをUITextField
前述のプロパティ プロパティに割り当てることです。
- (void)viewDidLoad {
[super viewDidLoad];
self.dateInputField.inputView = self.datePicker;
self.dateInputField.inputAccessoryView = self.datePickerToolbar;
}
これがあなたが探していたものであることを願っています。そこにあるすべてを見た後、これが最も簡単で、最も管理しやすい方法であると確信しています。また、このアプローチは、さまざまな入力要件に合わせて簡単に変更および再利用できるため、気に入っています。
私の意見では、隠された宝石。