2016-03-19 13 views
9

私のアプリでは、ユーザーがボタンをクリックしたときにUIDatePickerを表示したいと思います。その日付はUITextFiled.Iに保存されます。 私の問題は、日付ピッカーが完了ボタンが表示されない場合、どのように完了ボタンを追加できるかです。 今まで私は試しました。StoryBoardを通じてDatePickerに「完了」ボタンを追加するにはどうすればよいですか?

- (IBAction)pickerAction:(id)sender 
{ 
datePicker.datePickerMode=UIDatePickerModeDate; 
datePicker.hidden=NO; 
datePicker.date=[NSDate date]; 
[datePicker addTarget:self action:@selector(TextTitle:) forControlEvents:UIControlEventValueChanged]; 
[self.view addSubview:datePicker]; 
NSDateFormatter * df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"M-d-yyyy"]; 
selectedDate.text=[df stringFromDate:datePicker.date]; 
} 

-(void)TextTitle:(id)sender 
{ 
NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"M-d-yyyy"]; 
selectedDate.text = [NSString stringWithFormat:@"%@", 
         [df stringFromDate:datePicker.date]]; 
} 

は、どのように私はこのコードで完了]ボタンを追加することができます。 私を助けてください。

+0

これはストーリーボードではありませんが、最高の投票回答はアクセサリービューを使用すると非常に簡単です。http://stackoverflow.com/questions/13700552/toolbar-at-the-top-of-uipickerview-in-xcode – DogCoffee

答えて

8

回答は、このライブラリをチェック

datePicker=[[UIDatePicker alloc]init]; 
datePicker.datePickerMode=UIDatePickerModeDate; 
[TextField1 setInputView:datePicker]; 

UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)]; 
[toolBar setTintColor:[UIColor grayColor]]; 
UIBarButtonItem *doneBtn=[[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(ShowSelectedDate)]; 
UIBarButtonItem *space=[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 
[toolBar setItems:[NSArray arrayWithObjects:space,doneBtn, nil]]; 

[TextField1 setInputAccessoryView:toolBar]; 
+0

@magid。編集していただきありがとうございます。 –

+1

日付ピッカーを解除する方法を示すことをお勧めします。 TextField1.resignFirstResponderはどうですか?私は、フォークがビューからピッカーをアニメーション化するための手の込んだルーチンをどのように作成したのか、以下に気づいた。しかし、resignFirstResponderは、この例のようにTextField1のinputViewがpickerに設定されていると仮定して、あなたのためにそれを行います。 –

+0

ありがとう!それは役に立ちました。 – Raja

2

私のxibの 'done'ボタンのUIBarButtonItemをフレームセットとともに追加して、最初に表示されないようにしました(y値は親ビューの高さに等しい)。

ユーザーがピッカーにアクセスするたびに、UIDatePickerとUIToolbarのフレーム(y値)をアニメーションで変更して、キーボードのような画面の下部からピッカーと共にスライドするようにしました。

以下のコードを確認してください。

- (IBAction)showPicker 
{ 
    if(pickerVisible == NO) 
    { 
     // create the picker and add it to the view 
     if(self.datePicker == nil) self.datePicker = [[[UIDatePicker alloc] initWithFrame:CGRectMake(0, 460, 320, 216)] autorelease]; 
     [self.datePicker setMaximumDate:[NSDate date]]; 
     [self.datePicker setDatePickerMode:UIDatePickerModeDate]; 
     [self.datePicker setHidden:NO]; 
     [self.view addSubview:datePicker]; 

     // the UIToolbar is referenced 'using self.datePickerToolbar' 
     [UIView beginAnimations:@"showDatepicker" context:nil]; 
     // animate for 0.3 secs. 
     [UIView setAnimationDuration:0.3]; 

     CGRect datepickerToolbarFrame = self.datePickerToolbar.frame; 
     datepickerToolbarFrame.origin.y -= (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height); 
     self.datePickerToolbar.frame = datepickerToolbarFrame; 

     CGRect datepickerFrame = self.datePicker.frame; 
     datepickerFrame.origin.y -= (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height); 
     self.datePicker.frame = datepickerFrame; 

     [UIView commitAnimations]; 
     pickerVisible = YES; 
    } 
} 

- (IBAction)done 
{ 
    if(pickerVisible == YES) 
    { 
     [UIView beginAnimations:@"hideDatepicker" context:nil]; 
     [UIView setAnimationDuration:0.3]; 

     CGRect datepickerToolbarFrame = self.datePickerToolbar.frame; 
     datepickerToolbarFrame.origin.y += (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height); 
     self.datePickerToolbar.frame = datepickerToolbarFrame; 

     CGRect datepickerFrame = self.datePicker.frame; 
     datepickerFrame.origin.y += (self.datePicker.frame.size.height + self.datePickerToolbar.frame.size.height); 
     self.datePicker.frame = datepickerFrame; 
     [UIView commitAnimations]; 

     // remove the picker after the animation is finished 
     [self.datePicker performSelector:@selector(removeFromSuperview) withObject:nil afterDelay:0.3]; 
    } 
} 
1

あなたはUIViewを使用して、このUIViewであなたのDatepickerDoneボタンを追加することができます。完了ボタンをクリックしてアクションイベントを作成し、これであなたのUIViewの表示と非表示を処理します。 希望はこのことができます

関連する問題