当点击rightBarButton时,会出现一个UIPopoverController。
问题是:当点击NavigationBar时,这个UIPopoverController不会被解雇。
为什么呢?有没有办法解决它? 我试图搜索,但找不到任何关于此的内容。
提前致谢。
答案 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就像这样。当您呈现弹出窗口时保留对弹出窗口的引用,然后在点击导航栏中的任何按钮时将其关闭。