用 -dismissPopoverAnimated 解散 UIPopoverController:不会调用委托?

Posted

技术标签:

【中文标题】用 -dismissPopoverAnimated 解散 UIPopoverController:不会调用委托?【英文标题】:Dismissing UIPopoverController with -dismissPopoverAnimated: won't call delegate? 【发布时间】:2010-08-25 14:40:42 【问题描述】:

我的 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];

【问题讨论】:

我刚刚遇到了同样的“问题”,感谢您指出如何解决它; IE。关闭 popovercontroller 然后调用委托方法。 【参考方案1】:

这是正常的预期行为。

popoverControllerDidDismissPopover: 上引用Apple docs:

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

【讨论】:

谢谢!,我c。我认为该信息也应该出现在 UIPopoverController 类参考中,而不仅仅是在它的委托协议参考中。 ;)【参考方案2】:

以编程方式,popoverControllerDidDismissPopover 不会被调用,也不会被关闭,您必须自己调用委托:

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

其中 PopUp 是父 UIPopoverController

希望对你有帮助

干杯 铝

【讨论】:

这行得通,不幸的是它非常不直观。与其他使用动画的模型不同。例如,如果您在动画中释放视图,它会破坏应用程序,而不是在这里,如果您在 popoverControllerDidDismissPopover 中释放弹出框,它将完美地工作。【参考方案3】:

先设置委托;

yourPopup.delegate=self;

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

[self.yourPopUp dismissPopoverAnimated:YES];

【讨论】:

以上是关于用 -dismissPopoverAnimated 解散 UIPopoverController:不会调用委托?的主要内容,如果未能解决你的问题,请参考以下文章

校用设备|校用设备课桌椅|校用设备

c++中的cin 和cout 有啥用怎么用 >> <<有啥用怎么用

resource啥时候用单数?啥时候用复数?

测试用例设计:测试用例格式

什么时候用卡方检验,什么时候用t检验,什么时候用u检验

pybot执行多条用例时,某一个用例执行失败,停止所有用例的执行