单击NavigationBar时,UIPopoverController不会被忽略

时间:2011-05-26 10:00:40

标签: iphone uipopovercontroller

当点击rightBarButton时,会出现一个UIPopoverController。

问题是:当点击NavigationBar时,这个UIPopoverController不会被解雇。

为什么呢?有没有办法解决它? 我试图搜索,但找不到任何关于此的内容。

提前致谢。

6 个答案:

答案 0 :(得分:30)

UIPopoverController似乎在显示时将导航栏添加到其passthroughViews数组中。我能够通过在呈现弹出窗口后立即将passthroughViews重新设置为空数组来解决问题。

答案 1 :(得分:5)

从条形按钮启动时,您只需执行此操作

[popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[popoverController setPassthroughViews:nil];

答案 2 :(得分:1)

导航栏上的项目将自动添加到popoverViewController的passthroughViews中。它出现在弹出窗口后。所以你需要在那之后清除passthroughViews。

对于iOS 8,我们可以从UIViewController.popoverPresentationController获取popoverController,在此之前,我们可以从UIStoryboardPopoverSegue获取popoverController。

在您的视图中,控制器将视图控制器显示为弹出窗口。

var popoverController: UIPopoverController?

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Before IOS8, we need to get reference of popOverController from UIStoryboardPopoverSegue
    if (!self.respondsToSelector(Selector("popoverPresentationController"))) {
        if let popoverController = (segue as? UIStoryboardPopoverSegue)?.popoverController {
            let menuViewController = segue.destinationViewController as AIMSMenuTableViewController
            menuViewController.popoverController = popoverController
        }
    }
}

在您的视图控制器中显示为popover。

var popoverController: UIPopoverController? 

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    // Set passthroughViews to nil make tapping other navigation bar button
    // dismiss presenting popoverController
    if (self.respondsToSelector(Selector("popoverPresentationController"))) {
        self.popoverPresentationController?.passthroughViews = nil
    } else {
        // For iOS8-pre version, we need to pass popoverController reference from segue
        self.popoverController?.passthroughViews = nil
    }
}

答案 3 :(得分:0)

documentation for UIPopoverController州:

  

显示时,点击外面的   弹出窗口导致弹出窗口   被自动解雇。允许的   用户与指定的交互   观点,而不是解雇popover,你   可以分配一个或多个视图   passthroughViews属性。点击里面   弹出窗口没有   自动导致弹出窗口   驳回。您的观点和看法   控制器代码必须处理动作   和popover内的事件   明确地打电话给   dismissPopoverAnimated:方法为   需要的。

当条形按钮项目显示弹出窗口时,导航栏将添加为passthroughViews之一。

也许尝试将空数组设置为弹出控制器上的passthroughViews属性。

答案 4 :(得分:0)

你把这个鳕鱼放在任何其他动作上或完成选择后或在popover中提供一些关闭按钮并完成你的工作,

[popOverControllerObj dismissPopoverAnimated:YES];

答案 5 :(得分:0)

据我所知,这是预期的行为。 iBooks书架上的popover就像这样。当您呈现弹出窗口时保留对弹出窗口的引用,然后在点击导航栏中的任何按钮时将其关闭。