2012-08-16 58 views
5

我已經實現在彈出窗口中顯示日期選擇器,以編程方式執行它,如UIDatePicker in UIPopover中所示。如何使用StoryBoard在iPad上的Popover中顯示UIDatePicker?

但我一直在努力做在Interface Builder中,我已經在它和它對應的IBoulet取得了視圖控制器名爲DatePickerViewController.m有一個datepicker

#import <UIKit/UIKit.h> 

@interface DatePickerViewController : UIViewController 
@property (strong, nonatomic) IBOutlet UIDatePicker *birthdayDatePicker; 

@end 

DatePicker inside DatePickerViewController.m in StoryBoard

然後,我需要當編輯生日文本字段時,這將顯示在彈出窗口中。所以我用下面的代碼

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

} 

而且我也導入自定義DatePickerViewController在我目前的ViewController

#import "DatePickerViewController.h" 

但它沒有顯示的酥料餅裏面的日期選擇器。

enter image description here

有誰知道可能會發生?

+0

請檢查我的回答https://stackoverflow.com/a/7343106/815179 – Narayana 2017-08-28 17:29:02

回答

6

解決

我所要做的就是實例故事板日期選取器視圖控制器,如:

... 
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); 
... 

其中標識符在故事板設置屬性檢查器

Where to set the View controller Identifier

和現在顯示爲

DatePicker from DatePickerViewController is now showed

+0

我正在嘗試做同樣的事情。你是如何讓ViewController的尺寸與DatePicker相同的?我有一個海量的iPad大小的VC,底部有一個DatePicker。我有和你一樣的層次結構:VC> View> Picker,但它很龐大。而且,像你一樣,它沒有出現。 – 2012-12-04 04:37:16

+0

我發現[這裏](http://stackoverflow.com/questions/9728952/resize-of-uiviewcontroller-in-storyboard)。您需要在「大小檢查器」中調整大小。 – 2012-12-08 22:06:41

+0

這是正確的! – 2012-12-19 16:24:58

13

你可能想避免在腳本的所有工作通過創建視圖控制器和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; 

然後使用委託方法來獲得日期:

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

的onValueChange事件(我想這就是所謂的)它如果你正在使用故事板。 – giuseppe 2013-07-25 08:04:03

+0

這是一個很好的答案如果你想通過代碼來完成,但問題在於如何去做,那麼使用DatePicker – 2017-10-05 15:22:48

相關問題