单击外部弹出框时如何防止 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 弹出窗口?
当 UIViewController 显示弹出框时,更改 CALayer 颜色与 UIView tintColor 同步