2012-08-16 35 views
5

मैंने पॉपओवर के अंदर डेटपिकर दिखाने के लिए हासिल किया है, इसे प्रोग्रामेटिक रूप से कर रहा है क्योंकि यह UIDatePicker in UIPopover में दिखाया गया है।स्टोरीबोर्ड का उपयोग करके आईपैड पर पॉपओवर के अंदर मैं यूआईडीएटीपीकर कैसे दिखा सकता हूं?

लेकिन मैं इंटरफ़ेस बिल्डर में यह करने के लिए कोशिश कर रहे हैं, मैं पहले से ही एक दृश्य नियंत्रक नामित DatePickerViewController.m एक DatePicker के साथ इसे और उससे संबंधित IBoulet में

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

} 

और मैं भी मेरे वर्तमान ViewController

#import "DatePickerViewController.h" 

में कस्टम DatePickerViewController आयात लेकिन यह पॉपओवर अंदर datepicker नहीं दिखा रहा है।

enter image description here

किसी को भी पता है कि क्या हो रहा जा सकता है?

+0

कृपया मेरा उत्तर जांचें https://stackoverflow.com/a/7343106/815179 – Narayana

उत्तर

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 के समान आकार के रूप में कैसे मिला? मुझे नीचे एक डेटपिकर के साथ एक बड़े पैमाने पर आईपैड आकार का वीसी मिला है। मेरे पास आपके जैसा ही पदानुक्रम है: वीसी> व्यू> पिकर लेकिन इसका विशाल। और, आप की तरह, यह दिखाई नहीं दे रहा है। –

+0

मुझे पता चला [यहां] (http://stackoverflow.com/questions/9728952/resize-of-uiviewcontroller-in-storyboard)। आपको आकार निरीक्षक में चीजों का आकार बदलना होगा। –

+0

यह सही है! –

13

आप ViewController और प्रोग्राम के रूप में DatePicker बनाकर स्टोरीबोर्ड में सब काम से बचने के लिए चाहते हो सकता है:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 
{ 
    self.startDate = self.datePicker.date; 
} 
: तिथि पाने के लिए

//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; 

और फिर प्रतिनिधि विधि का उपयोग

+0

पर ऑनवेल्यू चेंज इवेंट (मुझे लगता है कि इसे कैसे कहा जाता है) का उपयोग करें यह अच्छा है अगर कोई स्टोरीबोर्ड – giuseppe

+0

का उपयोग नहीं करना चाहता है तो यह एक अच्छा जवाब है यदि आप इसे कोड द्वारा करना चाहते हैं, लेकिन समस्या यह थी कि कैसे करना है अगर आप स्टोरीबोर्ड का उपयोग कर रहे हैं। –