2016-03-19 13 views
9

W mojej aplikacji chcę wyświetlić UIDatePicker, gdy użytkownik kliknie przycisk.i ta data zapisz w UITextFiled. Zrobiłem to. Mój problem polega na tym, że gdy pojawia się okno wyboru daty, nie ma przycisku "Gotowe". Do teraz próbowałem.Jak dodać przycisk "Gotowe" w DatePicker Through StoryBoard?

- (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]]; 
} 

Jak mogę dodać zrobiony przycisk za pomocą tego kodu. proszę, pomóż mi.

+0

To nie jest storyboard, ale najwyższa głosowana odpowiedź tutaj jest bardzo łatwa przy użyciu widoku akcesoriów http://stackoverflow.com/questions/13700552/toolbar-at-the-top-of-uipickerview-in-xcode – DogCoffee

Odpowiedz

8

Odpowiedź jest

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. dziękuję za edycję. –

+1

Może to być dobry pomysł, aby pokazać, jak wyłączyć Selektor dat. A co powiesz na TextField1.resignFirstResponder? Zauważyłem poniżej, jak ludzie stworzyli skomplikowane rutyny do animowania wyboru z widoku. Jednak funkcja resignFirstResponder zrobi to za Ciebie, zakładając, że TextField1 ma swój inputView ustawiony na selektor, jak w tym przykładzie. –

+0

Dziękujemy! To było pomocne. – Raja

2

Dodałem UIToolbar z UIBarButtonItem dla przycisku "done" w moim pliku xib z ramką ustawioną tak, że nie jest ona początkowo widoczna (wartość y równa się wysokości widoku rodzica).

Za każdym razem, gdy użytkownik uzyskuje dostęp do selektora, zmieniłem ramkę (wartość y) UIDatePicker i UIToolbar z animacją, aby przesuwać się wraz z selektorem u dołu ekranu, podobnie jak na klawiaturze.

Sprawdź mój kod poniżej.

- (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

Można użyć UIView iw tym UIView dodać przycisk Datepicker i Done. Przycisk Gotowe tworzy zdarzenie akcji, w którym zajmiesz się ukrywaniem i wyświetlaniem swojego UIView. Hope this helps

Powiązane problemy