关闭 popOver
Posted
技术标签:
【中文标题】关闭 popOver【英文标题】:dismissing a popOver 【发布时间】:2013-04-09 19:42:52 【问题描述】:在我的应用程序中,我有一个表单视图,它有两个文本字段。当点击一个带有选择器的弹出框时,其中一个文本字段会出现。现在,当用户从弹出窗口结束时,大多数用户点击背景以将其关闭。即使我在弹出窗口中放置了一个完成按钮,用户也会不情愿地点击背景。所以当我点击背景时,弹出框消失了。但是当我想编辑另一个文本字段时,我必须点击它两次才能进入编辑模式。就像当弹出框出现时,它下面有一个图层,当它消失时,图层会一直存在,直到我第二次点击让它离开。有人熟悉这个吗?
【问题讨论】:
字数少,代码多 你刚才说什么?? 【参考方案1】:You could create a transparent UIButton on the background when the picker comes up so that when the user taps on the background, you can specify exactly what is to happen.
【讨论】:
我尝试将弹出框背景设为 UIControl 子类,并使用 IBAction 方法在按下背景时启动。但是,当我点击背景时,不会调用该方法,就好像背景不属于弹出框的 viewController 类一样。顺便说一句,我正在使用 segue popover。【参考方案2】:我建议您通过弹出窗口阻止背景以强制用户关闭
在显示弹出框的视图控制器中...
//when the popover is presented
UIView* view = [[UIView alloc] initWithFrame:self.view.bounds];
popOver.passthroughViews = @[view];
[self.view addSubview:view];
//when the popover is dismissed
[[self.view.subviews lastObject] removeFromSuperview];
(这里假设viewController的self.view
是你要屏蔽的触摸的背景)
同样,你可以实现一个视图覆盖按钮,在 viewController 中有一个选择器:
UIButton* button = [[UIButton alloc] initWithFrame:self.view.bounds];
[button addTarget:self action:@selector(clicked:) forControlEvents:UIControlEventAllEvents];
popOver.passthroughViews = @[button];
[self.view addSubview:view];
我认为这是您已经尝试过的?缺少的成分是passthroughViews
。默认情况下,后台交互被阻止,除了弹出框的关闭(这就是为什么您有“不可见层”的印象)-passthroughviews
允许您有选择地启用这些交互。
【讨论】:
好的,谢谢!顺便说一句,我正在通过 segue 显示弹出窗口,实际上在 segue 的检查器中有一个传递选项。以上是关于关闭 popOver的主要内容,如果未能解决你的问题,请参考以下文章