2013-01-14 47 views
2

我已經創建了一個UIPopoverController並點擊一個UIButton當如下如何解除UIPopoverController?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]]; 
    popoverController = [[UIPopoverController alloc] initWithContentViewController:controller]; 
} 

- (IBAction)showPopover:(UIButton *)sender 
{ 
    if ([popoverController isPopoverVisible]) { 
     [popoverController dismissPopoverAnimated:YES]; 
    } else { 
       CGRect popRect = CGRectMake(self.btnShowPopover.frame.origin.x, 
           self.btnShowPopover.frame.origin.y, 
           self.btnShowPopover.frame.size.width, 
           self.btnShowPopover.frame.size.height); 
      [popoverController presentPopoverFromRect:popRect 
             inView:self.view 
        permittedArrowDirections:UIPopoverArrowDirectionAny 
            animated:YES]; 
    } 
} 

btnShowPopover處於viewcontrollerUIButtonpopoverControllerUIPopoverController它添加到視圖控制器。

popovercontroller顯示正常,同時單擊按鈕。

但它不會當我點擊secondviewcontroller

UIButton我用下面的代碼爲

-(IBAction)y:(id)sender{ 
    fs = [[Firstviewcontroller alloc] initWithNibName:@"FIrstscreen" bundle:[NSBundle mainBundle]]; 
    [fs.popoverController dismissPopoverAnimated:TRUE]; 
} 

但它沒有工作駁回。

如何在點擊已添加到popovercontroller的viewcontoller中的按鈕時關閉popovercontroller

回答

10

您分配的Firstviewcontroller一個新的實例,所以它不會解僱前一個實例的酥料餅。

你需要傳遞,當你顯示酥料餅像舊實例:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]]; 
    popoverController = [[UIPopoverController alloc] initWithContentViewController:controller]; 
    [controller setFs:self] 
} 

和罷免,如:

-(IBAction)y:(id)sender 
{ 
    [fs.popoverController dismissPopoverAnimated:TRUE]; 
} 
+1

[controller setFs:self],它給出錯誤,如何在顯示彈出窗口時傳遞舊實例 – NAZIK

+0

@NAZIK:仍然有問題? –

+0

@ Midhun MP,是的,錯誤 - 在'PopOverViewController *'類型的對象上找不到popovercontroller - 現在該怎麼辦? – NAZIK

4

蘋果文檔:

的酥料餅的控制器不調用此方法來響應程序調用該方法dismissPopoverAnimated:。如果以編程方式關閉彈出窗口,則應在調用dismissPopoverAnimated:方法後立即執行任何清理操作。

因此didDimiss委託的方法不會被自己調用。

嘗試:

[self.popover dismissPopoverAnimated:YES]; 
[self.popover.delegate popoverControllerDidDismissPopover:self.PopUp]; 
+1

這不是這裏的情況,他是駁回初始化新實例老popover –

+0

確實,你是對的。 – Loris1634