Since UIActionSheet is deprecated in iOS8, you have to use some other view to hold the UIDatePicker and UIToolBar... In this answer I've used UIView to hold the above mentioned UI objects.
@interface ViewController ()<UIActionSheetDelegate, UITextFieldDelegate>{
UIActionSheet *pickerViewActionSheet;
UIDatePicker *datePicker;
UIToolbar *pickerToolbar;
UIView *dateView;
}
@property (strong, nonatomic) IBOutlet UITextField *dateOfBirthTextField;
@end
@implementation ViewController
-(void)textFieldDidBeginEditing:(UITextField *)textField{
if(textField == self.dateOfBirthTextField){
[textField resignFirstResponder];
float platformVersion = 8.0;
//Check for iOS 8.0+
if([[[UIDevice currentDevice] systemVersion] floatValue ] >= platformVersion){
// iOS8 DatePicker view implementation
dateView = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height/2.0, 320, 640)];
pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
pickerToolbar.barStyle=UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dateChosen:)];
[barItems addObject:barButtonItem];
barButtonItem.tag = 123;
[pickerToolbar setItems:barItems animated:YES];
[dateView addSubview:pickerToolbar];
datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 44.0, 320.0, 300.0)];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
datePicker.backgroundColor = [UIColor whiteColor];
[dateView addSubview:datePicker];
[self.view addSubview:dateView];
}
else {
//Pre iOS8.0 "usual" DatePicker implementation.
datePicker = [[UIDatePicker alloc] init];
pickerViewActionSheet = [[UIActionSheet alloc] initWithTitle:@"Select the date!"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:nil];
datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 44.0, 320.0, 300.0)];
datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged];
datePicker.tag = -1;
pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
pickerToolbar.barStyle=UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];
NSMutableArray *barItems = [[NSMutableArray alloc] init];
UIBarButtonItem *batButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonClicked)];
[barItems addObject:batButtonItem];
[pickerToolbar setItems:barItems animated:YES];
[pickerViewActionSheet addSubview:pickerToolbar];
[pickerViewActionSheet addSubview:datePicker];
[pickerViewActionSheet showInView:self.view];
[pickerViewActionSheet setBounds:CGRectMake(0,0,320, 464)];
}
}
}
//iOS8.0+ when the date has chosen, remove the corresponding view from the parent view.
-(void) dateChosen:(UIBarButtonItem *) barButton {
if(barButton.tag ==123){
[dateView removeFromSuperview];
}
}
//Get the chosen date from the UIDatePicker to the corresponding UITextField.
-(void)dateChanged{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy"];
self.dateOfBirthTextField.text = [dateFormatter stringFromDate:[datePicker date]];
}
//Pre iOS8.0 for closing the actionsheet
-(BOOL)closeDatePicker:(id)sender{
[pickerViewActionSheet dismissWithClickedButtonIndex:0 animated:YES];
[self.dateOfBirthTextField resignFirstResponder];
return YES;
}
//Pre iOS8.0
-(void)doneButtonClicked{
[self closeDatePicker:self];
}
@end
I hope this helps....