2010-08-25 55 views
14

我有我的UIPopoverController與自我作爲代理人: 當我點擊popover控制器外部時收到呼叫,但當我點擊內部我也想解僱,所以我使用-dismissPopoverAnimated:但在這種情況下不委託委託。 這是正常的嗎?這是一個錯誤還是我做錯了什麼?使用-dismissPopoverAnimated解除UIPopoverController:不會調用委託?

newDocPopoverController = [[UIPopoverController alloc] initWithContentViewController:vc]; 
[newDocPopoverController setPopoverContentSize:CGSizeMake(240, 44*4)]; 
[newDocPopoverController presentPopoverFromBarButtonItem:sender 
       permittedArrowDirections:UIPopoverArrowDirectionAny 
                 animated:YES]; 
[newDocPopoverController setDelegate:self]; 

UPDATE:

呵呵,問題不論起源(無論是bug還是這是預期的行爲)調用由本人委託解決問題:)

當contentViewController的視圖被觸動我會調用父UIPopoverController的委託。

if ([parentPopoverController.delegate popoverControllerShouldDismissPopover:parentPopoverController]){ 
    [parentPopoverController dismissPopoverAnimated:YES]; 
    [parentPopoverController.delegate popoverControllerDidDismissPopover:parentPopoverController]; 
}r]; 
+0

我剛剛遇到同樣的「問題」,謝謝指出如何解決它;即。關閉popovercontroller然後調用委託方法。 – Jack 2011-06-04 11:02:23

回答

22

這是正常的,預期的行爲。

引述Apple docspopoverControllerDidDismissPopover:

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

+0

謝謝!,我c。我認爲這個信息也應該出現在UIPopoverController類的引用中,而不僅僅是在它的委託協議引用中。 ;) – nacho4d 2010-08-25 15:01:10

22

編程的popoverControllerDidDismissPopover不會被調用,也不會被解僱,你就必須自己打電話委託:

[self.PopUp dismissPopoverAnimated:YES]; 
[self.PopUp.delegate popoverControllerDidDismissPopover:self.PopUp]; 

彈出哪裏是父UIPopoverController

希望這有助於

Cheers Al

+0

這個工程,不幸的是它非常不直觀。與使用動畫的其他模型不同。例如,如果您在動畫中釋放視圖,它會中斷應用程序,而在此處如果您釋放popoverControllerDidDismissPopover中的彈出窗口,它將完美工作。 – 2012-02-11 19:16:37

0

先設置代表;

yourPopup.delegate = self;

然後在你的代碼中的一些地方(可能在特定的方法調用由於某些事件)。 使用以下代碼;

[self.yourPopUp dismissPopoverAnimated:YES];