2012-08-16 18 views
5

Pop-up içindeki datepicker'ı göstermeye başladım, bunu UIDatePicker in UIPopover'da gösterildiği gibi programlı olarak yapıyordum.iPad'de bir UIDatePicker'ı StoryBoard'ı kullanarak iPad'de nasıl gösterebilirim?

Ama arayüz Builder'daki bunu çalışıyorlar, zaten ihtiyacım

#import <UIKit/UIKit.h> 

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

@end 

DatePicker inside DatePickerViewController.m in StoryBoard

Sonra o ve onun karşılık gelen IBoulet bir DatePicker ile View Controller adında DatePickerViewController.m yapılan Bu, Doğum Günü metin alanı düzenlendiğinde bir popover olarak gösterilecek. bu yüzden aşağıdaki kodu

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

} 

kullanmak Ve ben de benim şimdiki ViewController

#import "DatePickerViewController.h" 

özel DatePickerViewController içe Ama popover içeride datepicker gösterilmiyor.

enter image description here

herkes oluyor ne olabilir biliyor mu?

+0

Lütfen yanıtımı kontrol edin https://stackoverflow.com/a/7343106/815179 – Narayana

cevap

6

ben gibi Storyboard Tarihi Seçici View Controller örneğini edilir yapmanız gereken

Çözüldü: tanımlayıcı Storyboard ayarlanır

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

Müfettiş Özellikleri ve şimdi gösteriliyor

DatePicker from DatePickerViewController is now showed

+0

Aynı şeyi yapmaya çalışıyorum. ViewController'ı, DatePicker ile aynı boyutta nasıl aldınız? Altta bir DatePicker ile büyük bir iPad boyutlu VC var. Seninle aynı hiyerarşiye sahibim: VC> Görünüm> Seçici ama onun muazzam. Ve senin gibi, ortaya çıkmıyor. –

+0

[buradan] öğrendim (http://stackoverflow.com/questions/9728952/resize-of-uiviewcontroller-in-storyboard). Boyut Denetçisinde bir şeyi yeniden boyutlandırmanız gerekir. –

+0

Bu doğru! –

13

Sen ViewController ve programlı DatePicker oluşturarak Film şeridinde tüm çalışmaları kaçınmak isteyebilirsiniz:

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController 
{ 
    self.startDate = self.datePicker.date; 
} 
: tarihi almak için

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

Ve sonra temsilci Yöntemini kullanmak

+0

'daki onValueChange olayını kullanın (bu nasıl adlandırılır) Bu, storyboard'u kullanmak istemiyorsa iyi olur. – giuseppe

+0

Bu, kodla yapmak istiyorsanız iyi bir yanıttır, ancak sorun nasıl yapılacağıdır Storyboards kullanıyorsanız. –