私はiOSに非常に新しいので、明らかにこの解決策に従うことを試みるときにいくつかの概念が欠けています テキストフィールドをタップするときに日付ピッカーを表示する 私の問題に。
DatepickerAppDelegateと呼ばれるクラスにインターフェイスと実装がありますが、ここでは失われました。
」XIBで、UIToolbarとUIDatePickerを引き出しますが、ビューにアタッチしません。アウトレットを適切に接続します。dateChanged:日付ピッカーとdoneEditing:の変更に応答します:が呼び出されますツールバーの[完了]ボタンがクリックされたとき。それらも接続します。メソッドは次のように実装されます。 "
私はXIBについて何かを読みましたが、絵コンテを使用しているので、そうではないと思います。また、View Controllerにアタッチせずに要素を引き出す方法がわからない(試していますが、マウスボタンを離すと、ツールがツールバーに戻ります) tにUIToolbarが必要な理由さえ理解できません。
最後に、テキストフィールドをdatepickerデリゲートに接続するにはどうすればよいですか?
誰か助けてくれますか?
更新:
実際、それは非常に単純で、必要なことは次のとおりです。
datePicker = [[UIDatePicker alloc] init];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
self.birthday.inputView = datePicker;
UIResponder
は、UITextField
の継承元です。 inputView
というプロパティを定義します 。このプロパティ(UIView *
)は、UIResponder
が最初のレスポンダーになったときに表示されるビューを定義できますキーボードの代わりに。
したがって、textFieldをタップしたときにUIDatePicker
を表示する場合(つまり、そのtextFieldを最初のレスポンダーにする場合)、単純に言うことができます。
UIDatePicker *datePicker = [[UIDatePicker alloc] init...];
... configure datePicker ...
[myTextField setInputView:datePicker];
これで、UITextField
がタップされると、代わりにUIDatePicker
が表示されます。
さまざまな向きとイディオムを処理する必要があるため、これ以上のことを行う必要があります。
しかし、それが基本的な考え方です。
(そして、UIDatePicker
の上にツールバーが必要な場合、それはinputAccessoryView
プロパティの目的です...)
ViewDidLoadのViewController.m
- (void)viewDidLoad {
[super viewDidLoad];
UIDatePicker *datePicker = [[UIDatePicker alloc]init];
[datePicker setDate:[NSDate date]];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(dateTextField:) forControlEvents:UIControlEventValueChanged];
[txtFieldBranchYear setInputView:datePicker];
}
ViewControllerにメソッドを1つ追加します
-(void) dateTextField:(id)sender
{
UIDatePicker *picker = (UIDatePicker*)txtFieldBranchYear.inputView;
[picker setMaximumDate:[NSDate date]];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
NSDate *eventDate = picker.date;
[dateFormat setDateFormat:@"dd/MM/yyyy"];
NSString *dateString = [dateFormat stringFromDate:eventDate];
txtFieldBranchYear.text = [NSString stringWithFormat:@"%@",dateString];
}
txtFieldBranchYearはUITextFieldのアウトレットです
ビューにdatepickerビューとuitoolbarviewを追加します。例えば
CGFloat toolbarHeight = 44.f;
CGFloat datePickerHeight = 140.f;
CGFloat containerViewHeight = toolbarHeight+datePickerHeight;
//create container view for datepicker and toolbar
UIView *containerView = [[UIVIew alloc] initWithFrame:CGRectMake(0.f, [self.view bounds].size.height+containerViewHeight, [self.view bounds].size.width, containerViewHeight)];
//after init toolbar set the frame
toolBar.frame = CGRectMake(0.f,0.f,containerView.frame.size.width, toolbarHeight];
//then add on toolbar button save and release it after add
//after init datePicker set the frame
datePicker.frame = CGRectMake(0.f, toolbarHeight, containerView.frame.size.width, datePickerHeight);
//add datePicker and toolBar to containerView
[containerView addSubview: toolBar];
[containerView addSubview: datePicker];
[toolBar release];
[datePicker release];
//add containerView to main view
[self.view addSubview: containerView];
[containerView release];
したがって、ビューがロードされたとき、それらは非表示になります。コンテナビューのYは、ビューフレームの外側にあります。
ここで、UITextFieldDelegateのプロパティデリゲートを割り当てる必要があります
textfield.delegate = self;
デリゲートのメソッドtextFieldDidBeginEditingを参照 ITextFieldDelegate datePickerとツールバーを表示するメソッドを起動する必要があります。選択されたものを定義する多くのtextFieldsがある場合、整数であるtagプロパティを使用し、多くの代わりにswitchを使用できますif条件。
DatePickerとツールバーを表示するには、containerViewフレームのYを変更する必要があります。方法は次のとおりです
CGRect containerViewFrame = containerView.frame;
containerViewFrame.y -=containerViewHeight;
containerView.frame = containerViewFrame;
ContainerViewHeight変数だけを非表示にします。 UIViewAnimationsを使用して、いくつかのアニメーションで表示できます。たとえばUIViewAnimationCurveEaseInOut