使用 -dismissPopoverAnimated 关闭 UIPopoverController:不会调用委托?

发布于 2024-09-15 19:14:51 字数 1011 浏览 7 评论 0原文

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

I have my UIPopoverController with self as a delegate:
I receive calls when I tap outside the popover controller, but when I tap inside I want to dismiss too, so I use -dismissPopoverAnimated: but delegate is not called in this case.
Is this normal? Is this a bug or I am doing something wrong?

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

UPDATE:

Oh, regardless the origin of the problem (Whether is a bug or this is the intended behavior) calling the delegate by myself solves the problem :)

When the contentViewController's view is touched I will call parent UIPopoverController's delegate a call.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

孤星 2024-09-22 19:14:51

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

引用 Apple 文档上的 popoverControllerDidDismissPopover:

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

That's normal, expected behavior.

Quoting the Apple docs on popoverControllerDidDismissPopover::

The popover controller does not call this method in response to programmatic calls to the dismissPopoverAnimated: method. If you dismiss the popover programmatically, you should perform any cleanup actions immediately after calling the dismissPopoverAnimated: method.

杀お生予夺 2024-09-22 19:14:51

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

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

其中 PopUp 是父 UIPopoverController

希望这有帮助

干杯

Programmatically the popoverControllerDidDismissPopover does not get called and won't dismissed, you'll have to call the delegate yourself:

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

Where PopUp is the parent UIPopoverController

Hope this helps

Cheers
Al

短叹 2024-09-22 19:14:51

首先设置委托;

yourPopup.delegate=self;

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

[self.yourPopUp dismissPopoverAnimated:YES];

set the delegate first;

yourPopup.delegate=self;

then some where in your code (May be in Particular Method call due some event).
use the following code;

[self.yourPopUp dismissPopoverAnimated:YES];

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文