2012-08-16 13 views
5

He logrado mostrar el datepicker dentro del popover, haciéndolo programáticamente como se muestra en UIDatePicker in UIPopover.¿Cómo puedo mostrar un UIDatePicker dentro de un Popover en iPad usando StoryBoard?

Pero he estado tratando de hacerlo en constructor de interfaces, ya que hizo un llamado DatePickerViewController.m Vista Controlador con un DatePicker en ella y su correspondiente IBoulet

#import <UIKit/UIKit.h> 

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

@end 

DatePicker inside DatePickerViewController.m in StoryBoard

Entonces necesito esto se mostrará en un popover cuando se edite el campo de texto Cumpleaños. así que uso el siguiente código

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

} 

Y también puedo importar la costumbre DatePickerViewController en mi ViewController actual

#import "DatePickerViewController.h" 

Pero no aparece el selector de fechas dentro del popover.

enter image description here

¿Alguien sabe lo que puede estar pasando?

+0

Revise mi respuesta https://stackoverflow.com/a/7343106/815179 – Narayana

Respuesta

6

Resuelto

Todo lo que tengo que hacer es crear una instancia de la Fecha StoryBoard Selector Vista Controlador como:

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

donde el identificador se encuentra en StoryBoard Atributos inspector

Where to set the View controller Identifier

y ahora se muestra

DatePicker from DatePickerViewController is now showed

+0

Estoy tratando de hacer exactamente lo mismo. ¿Cómo conseguiste que ViewController tuviera el mismo tamaño que el DatePicker? Tengo un gran VC de tamaño iPad con un DatePicker en la parte inferior. Tengo la misma jerarquía que tú: VC> Ver> Selector, pero es masivo. Y, como tú, no aparece. –

+0

Descubrí [aquí] (http://stackoverflow.com/questions/9728952/resize-of-uiviewcontroller-in-storyboard). Necesita cambiar el tamaño de las cosas en Size Inspector. –

+0

¡Eso es correcto! –

13

Es posible que desee evitar que todo el trabajo en el guión gráfico mediante la creación de la ViewController y el DatePicker programación:

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

Y a continuación, utilizar el método de delegado para obtener la fecha:

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

esto es bueno si no se quiere usar storyboard – giuseppe

+0

Esta es una buena respuesta si quiere hacerlo por código, pero el problema era cómo hacerlo si estás usando Storyboards. –

Cuestiones relacionadas