14

我有我的 UIPopoverController 与 self 作为委托:当我在弹出框控制器外部点击时收到呼叫,但是当我点击内部时我也想关闭,所以我使用 -dismissPopoverAnimated: 但在这种情况下不调用委托。这是正常的吗?这是一个错误还是我做错了什么?

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

更新:

哦,不管问题的根源(无论是错误还是这是预期的行为)自己调用委托都可以解决问题:)

当 contentViewController 的视图被触摸时,我将调用父 UIPopoverController 的委托。

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

3 回答 3

22

这是正常的,预期的行为。

引用ApplepopoverControllerDidDismissPopover:文档:

弹出框控制器不会调用此方法来响应对该方法的编程调用dismissPopoverAnimated:。如果您以编程方式关闭弹出框,则应在调用该dismissPopoverAnimated:方法后立即执行任何清理操作。

于 2010-08-25T14:52:37.177 回答
22

以编程方式 popoverControllerDidDismissPopover 不会被调用并且不会被解雇,您必须自己调用委托:

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

PopUp 是父级UIPopoverController

希望这可以帮助

干杯艾尔

于 2011-01-11T17:55:40.707 回答
0

首先设置委托;

yourPopup.delegate=self;

然后在您的代码中的某些位置(由于某些事件可能在特定的方法调用中)。使用以下代码;

[self.yourPopUpdismissPopoverAnimated:YES];

于 2013-04-03T10:01:19.527 回答