如何使用StoryBoard在iPad上的Popover中显示UIDatePicker?

我已经实现了在popup窗口中显示datepicker , 以UIPopover中的UIDatePicker显示的方式进行编程 。

但我一直试图在界面生成器,我已经做了一个名为DatePickerViewController.m视图控制器与DatePicker在其中,其对应的IBoulet

#import <UIKit/UIKit.h> @interface DatePickerViewController : UIViewController @property (strong, nonatomic) IBOutlet UIDatePicker *birthdayDatePicker; @end 

在StoryBoard中的DatePickerViewController.m内的DatePicker

然后当生日文本字段正在被编辑时,我需要在popover中显示它。 所以我使用下面的代码

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ //Assign DatePicker to Birthday TextField //build our custom popover view DatePickerViewController* popoverContent = [[DatePickerViewController alloc] init]; //resize the popover view shown //in the current view to the view's size popoverContent.contentSizeForViewInPopover = CGSizeMake(320, 216); // dismiss existing popover if (self.popoverControllerBirthday) { [self.popoverControllerBirthday dismissPopoverAnimated:NO]; self.popoverControllerBirthday = nil; } //create a popover controller with my DatePickerViewController in it UIPopoverController *popoverControllerForDate = [[UIPopoverController alloc] initWithContentViewController:popoverContent]; //Set the delegate to self to receive the data of the Datepicker in the popover popoverControllerForDate.delegate = self; //Adjust the popover Frame to appear where I want CGRect myFrame =textField.frame; myFrame.origin.x = 260; myFrame.origin.y = 320; //Present the popover [popoverControllerForDate presentPopoverFromRect:myFrame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; self.popoverControllerBirthday = popoverControllerForDate; return NO; // tells the textfield not to start its own editing process (ie show the keyboard) } 

而且我还在当前的ViewController中导入了自定义的DatePickerViewController

 #import "DatePickerViewController.h" 

但是它没有显示popup窗口中的dateselect器。

在这里输入图像说明

有人知道会发生什么吗?

您可能希望通过编程创buildViewController和DatePicker来避免故事板中的所有工作:

 //build our custom popover view UIView *v = [[UIView alloc] init]; CGRect pickerFrame = CGRectMake(0, 0, 320, 216); UIDatePicker *pView=[[UIDatePicker alloc] initWithFrame:pickerFrame]; pView.datePickerMode = UIDatePickerModeDate; self.datePicker = pView; [v addSubview:self.datePicker]; UIViewController *popoverContent = [[UIViewController alloc]init]; popoverContent.view = v; //resize the popover view shown //in the current view to the view's size popoverContent.contentSizeForViewInPopover = CGSizeMake(320, 216); // dismiss existing popover if (self.pcDatePicker) { [self.pcDatePicker dismissPopoverAnimated:NO]; self.pcDatePicker = nil; } //create a popover controller with my DatePickerViewController in it UIPopoverController *popoverControllerForDate = [[UIPopoverController alloc] initWithContentViewController:popoverContent]; //Set the delegate to self to receive the data of the Datepicker in the popover popoverControllerForDate.delegate = self; //Adjust the popover Frame to appear where I want CGRect myFrame = sender.frame;//CGRectMake(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, 320, 200); myFrame.origin.x = 260; myFrame.origin.y = 320; //Present the popover [popoverControllerForDate presentPopoverFromRect:myFrame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; self.pcDatePicker = popoverControllerForDate; 

然后使用委托方法获取date:

 - (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController { self.startDate = self.datePicker.date; } 

解决了

我所要做的就是实例化StoryBoard Date Picker View Controller,如下所示:

 ... DatePickerViewController* popoverContent = [[DatePickerViewController alloc] init]; popoverContent =[[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"DatePickerVC"]; //resize the popover view shown //in the current view to the view's size popoverContent.contentSizeForViewInPopover = CGSizeMake(320, 216); ... 

在StoryBoard属性检查器中设置标识符

在哪里设置视图控制器标识符

现在显示

现在显示DatePickerViewController中的DatePicker