2013-07-21 30 views
0

我想從DatePickerPopupViewController傳遞datepicker.date到我的SensorvViewcontroller,如下所示。但是,它返回給我「null」。我究竟做錯了什麼?我的代碼如下:PopupViewController返回null到ViewController

#import "DatePopoverViewController.h" 

@interface DatePopoverViewController() 

@end 

@implementation DatePopoverViewController 
@synthesize datePicker; 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view from its nib. 
    datePicker.date=[NSDate date]; 
} 



@end 

#import "SensorViewController.h" 

@interface SensorViewController() 

@end 
// this represent my button which triggers popupViewController 

-(void)chooseDate 
{ 

    if([popoverController isPopoverVisible]) 
    { 
    [popoverController dismissPopoverAnimated:YES]; 

    } 
    else 
    { 
     CGRect popRect=CGRectMake (900,1,1,1); 
     //CGRect popRect=CGRectMake (tools.frame.origin.x,tools.frame.origin.y,50,50); 
     popoverController.popoverContentSize =CGSizeMake(320,216); 
     [popoverController presentPopoverFromRect:popRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
     datepop=[[DatePopoverViewController alloc]init]; 
     NSDate *ali= datepop.datePicker.date; 
     NSLog(@"%@",ali); 
    } 

} 

    @end 

enter image description here

+0

你似乎創造它,然後設法立即獲取日期之前呈現酥料餅... – Wain

+0

@Wain,應該如何呢? – casillas

回答

1

此代碼:

CGRect popRect=CGRectMake (900,1,1,1); 
    //CGRect popRect=CGRectMake (tools.frame.origin.x,tools.frame.origin.y,50,50); 
    popoverController.popoverContentSize =CGSizeMake(320,216); 
    [popoverController presentPopoverFromRect:popRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 
    datepop=[[DatePopoverViewController alloc]init]; 
    NSDate *ali= datepop.datePicker.date; 
    NSLog(@"%@",ali); 

可能應該更喜歡:

popoverController=[[DatePopoverViewController alloc]init]; 

    CGRect popRect=CGRectMake (900,1,1,1); 
    //CGRect popRect=CGRectMake (tools.frame.origin.x,tools.frame.origin.y,50,50); 
    popoverController.popoverContentSize =CGSizeMake(320,216); 
    [popoverController presentPopoverFromRect:popRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES]; 

,你應該建立一個委託關係或阻止回調,以便在用戶實際選擇日期時調用方法並調用y OU可以這樣做:

NSDate *ali= popoverController.datePicker.date; 
NSLog(@"%@",ali); 

或者,更好的酥料餅的控制器從所述拾取器獲取的日期,並將其作爲一個參數傳遞給回調方法/塊。


類似的信息(類型直列):

在酥料餅:

typedef void (^CompletionBlock)(); 

@propertty (copy, nonatomic) CompletionBlock completionBlock; 

- (void)dateSelected { 
    self.completion(); 
} 

在源控制器:

self.popoverController.completionBlock = ^{ 
    NSLog(@"%@", self.popoverController.datePicker.date); 
}; 
+0

實際上,在我的viewDidLoad方法中,我已經初始化了控制器= [[DatePopoverViewController alloc] initWithNibName:@「DatePopoverViewController」bundle:nil]; popoverController = [[UIPopoverController alloc] initWithContentViewController:controller]; – casillas

+0

好的,所以你不需要再創建它,你只需要設置一個方法來處理日期選擇並將它傳遞迴源控制器。 – Wain

+0

這正是我的問題。我還沒有能夠處理它。我錯過了一些東西。您的答案已經點擊了已接受的答案。 – casillas

0

這下面的代碼工作:

//在標題中

@property (nonatomic,strong) UIDatePicker *datePicker; 

//實施

UIViewController* popoverContent = [[UIViewController alloc] init]; //ViewController 

UIView *popoverView = [[UIView alloc] init]; //view 
popoverView.backgroundColor = [UIColor blackColor]; 

datePicker=[[UIDatePicker alloc]init];//Date picker 
datePicker.frame=CGRectMake(0,44,320, 216); 
datePicker.datePickerMode = UIDatePickerModeDateAndTime; 
[datePicker setMinuteInterval:5]; 
[datePicker setTag:10]; 
[datePicker addTarget:self action:@selector(Result) forControlEvents:UIControlEventValueChanged]; 
[popoverView addSubview:datePicker]; 

popoverContent.view = popoverView; 
popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent]; 
popoverController.delegate=self; 
[popoverContent release]; 

[popoverController setPopoverContentSize:CGSizeMake(320, 264) animated:NO]; 
[popoverController presentPopoverFromRect:tempButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];//tempButton.frame where you need you can put that frame 

-(void)Result 
{ 

NSLog (@"Pciked Date%@", datePicker.date); 
}