我在关闭从 UINavigationController 的 navigationItem 启动的弹出框时遇到问题。似乎由 UINavigationController 插入的导航项不会触发 UIPopoverController 的解除。通常,当您在弹出框外点击时,它会被关闭。但是当您点击导航项时,弹出框不会被关闭。更糟糕的是,如果您点击触发弹出框的按钮,您将获得弹出框的第二个实例。
所有这些都是使用故事板完成的: - 创建一个视图,将其嵌入到 UINavigationView 中,以便在顶部获得一个 navigationItem。- 将 UIBarButtonItem 放入 navigationItem(左或右,对于导航堆栈上的初始视图无关紧要)。- 定义另一个视图,并将一个 segue 从 UIBarButtonItem 拖到此视图。- 将segue设置为popover。
弹出窗口打开后,我无法通过点击 navigationItem 将其关闭。我不敢相信这“按设计工作”,所以我怀疑我错过了一些东西。
虽然我的目标是尽可能少地编程(这就是故事板的意义所在,不是吗?),但我想到了解决方法:我想到的第一个解决方法是在 navigationItem 中添加一个 UITapGestureRecognizer,这会忽略当它检测到在 navigationItem 上的点击时弹出。不幸的是,navigationItem 似乎不是 UIVIew,所以它缺少 addGestureRecognizer: 方法...
编辑:向 self.navigationController.navigationBar 添加 UITapGesturerecognizer 是可能的,但会阻止任何点击到达导航栏上的 UIBarButtonItems。是的,我本可以预料到的。
非常感谢您的帮助,诺比