【问题标题】:Prevent popovers from displaying over presented views防止弹出框显示过度呈现的视图
【发布时间】:2013-06-05 15:03:29
【问题描述】:

我正在尝试显示在 X 量不活动后出现的密码屏幕。我在根视图控制器上使用 presentViewController:animated:completion: ,它按预期工作,除非已经显示了弹出框。从条形按钮项目中显示的弹出框出现在显示的密码屏幕上。

在呈现视图控制器时,有没有办法关闭或隐藏所有可见的弹出框?

【问题讨论】:

    标签: ios cocoa-touch uipopovercontroller presentmodalviewcontroller uipopover


    【解决方案1】:

    在第一个窗口上创建并添加第二个窗口。在第二个窗口中显示密码屏幕。这将允许它出现在第一个窗口中的任何和所有视图上。当您关闭密码屏幕时,请务必移除新窗口并再次按下第一个键。

    【讨论】:

    • 如何添加这个窗口? UIApplication 的 windows 属性看起来是只读的。
    • 看起来 makeKeyAndVisible 会自动完成。这似乎可行 - 唯一的问题是我设置为 rootViewController 的视图控制器中的按钮不响应触摸(并且我明确设置了 enableUserInteraction)。
    • 通过显式设置窗口大小解决了触摸响应问题。谢谢!
    【解决方案2】:

    你有对弹出框的引用吗?然后你就可以打电话了

    [popover dismissPopoverAnimated:NO];
    

    当您去商店购买密码覆盖时。

    编辑

    遍历子视图并查看是否可以关闭弹出框。我真的建议尝试找到一些其他的做事方式,因为这很恶心。但它应该可以工作(未经测试)。

    for (UIView* view in self.view.subviews) {
        if([view respondsToSelector:@selector(dismissPopoverAnimated:)]){
            [(UIPopoverController*)view dismissPopoverAnimated:NO];
        }
    }
    

    【讨论】:

    • 我希望使它更通用。有很多潜在视图和很多不相关的弹出框。
    • 有一个非常讨厌的方法,通过循环遍历所有子视图并查看它是否响应dismissPopoverAnimated:。见编辑。
    • 我认为这是一种方法。我已经查看了遍历视图控制器子视图控制器,直到找到 UIPopoverController - 似乎弹出框控制器有一个父视图控制器,但同一个视图控制器没有 UIPopoverController 作为子视图控制器。知道为什么会这样吗?
    • 我不太确定,我的猜测是子视图控制器与视图控制器包含(想想标签栏)相关,而父视图控制器在某种程度上有所不同。抱歉,我帮不了你了。
    【解决方案3】:

    NSNotifications 是解决这个问题的好工具。让所有显示弹出框的视图或控制器侦听名为 WillPresentPasscodeScreen 的通知,并实现一个在收到通知时关闭弹出框的方法。然后,在显示密码 VC 之前,发布 WillPresentPasscodeScreen 通知-- 无论您在应用程序中的哪个位置,都不会再出现弹出窗口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-05
      • 1970-01-01
      • 2011-08-08
      相关资源
      最近更新 更多