【发布时间】:2011-09-02 11:14:07
【问题描述】:
当点击 rightBarButton 时,会出现一个 UIPopoverController。
问题是:当点击 NavigationBar 时,这个 UIPopoverController 没有关闭。
为什么?有没有办法解决它? 我试图搜索,但找不到任何关于此的内容。
提前致谢。
【问题讨论】:
标签: iphone uipopovercontroller
当点击 rightBarButton 时,会出现一个 UIPopoverController。
问题是:当点击 NavigationBar 时,这个 UIPopoverController 没有关闭。
为什么?有没有办法解决它? 我试图搜索,但找不到任何关于此的内容。
提前致谢。
【问题讨论】:
标签: iphone uipopovercontroller
UIPopoverController 在出现时似乎将导航栏添加到其passthroughViews 数组中。我能够通过在显示弹出框后立即将 passthroughViews 重新设置为空数组来解决问题。
【讨论】:
从栏按钮启动时,您可以简单地执行此操作
[popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
[popoverController setPassthroughViews:nil];
【讨论】:
导航栏上的项目将自动添加到 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
}
}
}
在显示为弹出框的视图控制器中。
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
}
}
【讨论】:
documentation for UIPopoverController 声明:
显示时,点击 弹出窗口导致弹出窗口 自动解散。为了让 用户与指定的交互 视图而不是关闭弹出窗口,你 可以将一个或多个视图分配给 passthroughViews 属性。里面的水龙头 弹出窗口不 自动导致弹出框 被解雇。你的看法和看法 控制器代码必须处理动作 和弹出框内的事件 明确地调用 dismissPopoverAnimated: 方法为 需要。
当从条形按钮项呈现弹出框时,导航栏将添加为passthroughViews 之一。
也许尝试将一个空数组设置为您的弹出控制器上的passthroughViews 属性。
【讨论】:
您将此 cod 放在任何其他操作上或完成选择后或在弹出窗口中提供一些关闭按钮并完成 uy yhing,
[popOverControllerObj dismissPopoverAnimated:YES];
【讨论】:
据我所知,这是预期的行为。 iBooks 中书架上的弹出框的行为是这样的。显示弹出框时保留对它的引用,然后在点击导航栏中的任何按钮时将其关闭。
【讨论】: