关闭 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的主要内容,如果未能解决你的问题,请参考以下文章

关闭套接字会关闭流吗?

WINFORM如何关闭主窗口?

流的关闭

如果流没有手动关闭,它啥时候关闭?

在关闭连接之前关闭阅读器

linux 服务 启动 关闭 列表