单击外部弹出框时如何防止 UIPopoverPresentationController 被关闭?

Posted

技术标签:

【中文标题】单击外部弹出框时如何防止 UIPopoverPresentationController 被关闭?【英文标题】:How to prevent UIPopoverPresentationController from being dismissed when clicking outside popover? 【发布时间】:2015-07-08 17:07:58 【问题描述】:

在我的通用 ios 8 应用程序中,我使用 UIPopoverPresentationController 呈现一个弹出框,如下图 prepareForSegue 所示:

FavoriteNameViewController *nameVC = segue.destinationViewController;
UIPopoverPresentationController *popPC = nameVC.popoverPresentationController;
popPC.delegate = self;

还有这个委托方法。

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller 
return UIModalPresentationNone;

在这种特殊情况下,我展示了一个看起来像警报但实际上不是的视图控制器。

现在我的问题是用户可以在此弹出框之外单击它并被关闭。这并没有真正的问题,只是警报不是这样工作的,我希望它能够模拟警报。

我看到UIPopoverControllerDelegate 有一个叫popoverControllerShouldDismissPopover: 的方法,但是UIPopoverPresentationControllerDelegate 没有那个方法,我相信我需要使用后者。

【问题讨论】:

我们现在可以谈谈(您在之前的问题中拒绝做的事情)为什么您不为此使用呈现的视图吗?你为什么不做我在这里做的事情:制作一个看起来和行为都像警报视图的呈现视图? github.com/mattneub/custom-alert-view-iOS7 - 这也将解决在 iPhone 6 plus 上不是横向弹出框的弹出框问题。 我走这条路的原因是因为当我搜索如何呈现弹出框时,我找到了这种方法。我会检查你的项目,以便更好地理解你在说什么。非常感谢。 【参考方案1】:

您需要将弹出框控制器的passthroughViews 设置为nil,并将视图控制器的modalInPopover 设置为YES。

【讨论】:

【参考方案2】:

在您的视图中尝试以下操作

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
    return YES;

【讨论】:

以上是关于单击外部弹出框时如何防止 UIPopoverPresentationController 被关闭?的主要内容,如果未能解决你的问题,请参考以下文章

将 UITableView 实例化为弹出框时,UITableViewCell 的属性为零

如何通过单击外部来关闭 Twitter Bootstrap 弹出窗口?

在 iOS 8 中呈现弹出框时如何使屏幕模糊

当 UIViewController 显示弹出框时,更改 CALayer 颜色与 UIView tintColor 同步

出现弹出框时 UI 没有响应

单击外部时隐藏Angular UI Bootstrap弹出窗口