从 self.navigationItem (在 UINavigationController 内部)打开时,UIPopoverController 不会被关闭

2023-12-14

我在关闭从 UINavigationController 的 navigationItem 启动的弹出窗口时遇到问题。看来由 UINavigationController 插入的导航项不会触发 UIPopoverController 的解除。通常,当您点击弹出窗口外部时,它会被关闭。但是,当您点击导航项时,弹出窗口不会消失。更糟糕的是,如果您点击触发弹出窗口的按钮,您将获得弹出窗口的第二个实例。

所有这些都是使用故事板完成的: - 创建一个视图,将其嵌入到 UINavigationView 中,以便它在顶部获得一个 navigationItem。 - 将 UIBarButtonItem 放入 navigationItem(左或右,对于导航堆栈上的初始视图无关紧要)。 - 定义另一个视图,并将 Segue 从 UIBarButtonItem 拖动到该视图。 - 将segue设置为popover。

弹出窗口打开后,我无法通过点击导航项将其关闭。我不敢相信这“按设计工作”,所以我怀疑我错过了一些东西。

虽然我的目标是尽可能少地编程(这就是故事板的意义,不是吗?),但我想到了解决方法:我想到的第一个解决方法是向 navigationItem 添加 UITapGestureRecognizer,这将消除当它检测到对导航项的点击时弹出。不幸的是,navigationItem似乎不是UIVIew,因此它缺少addGestureRecognizer:方法...

编辑:将 UITapGesturerecognizer 添加到 self.navigationController.navigationBar 是可能的,但会阻止任何点击到达导航栏上的 UIBarButtonItems。是的,我本可以预料到这一点。

非常感谢您的帮助, 野比


以下是故事板中弹出窗口的完整描述。假设出现在弹出窗口中的控制器名为MyPopupController, 做这个:

  1. 定义从主场景到主场景的 SegueMyPopupController场景、使用风格Popover.
  2. 添加属性到MyPopupController.h

    @property (weak, nonatomic) UIPopoverController *popover;
    
  3. 综合属性MyPopupController.m

    @synthesize popover = _popover
    
  4. In the prepareForSegue:sender:主场景控制器的方法,设置popover财产:

    UIStoryboardPopoverSegue *ps = (UIStoryboardPopoverSegue *)segue;
    MyPopupController *dc = ps.destinationViewController;
    dc.popover = ps.popoverController;
    
  5. In the viewWillAppear:的方法MyPopupController,添加以下代码(不要忘记[super viewWillAppear]以及):

    self.popover.passThroughViews = nil;
    

你现在应该完成了。

感谢罗伯特的基本想法 - 我只需要找到正确的地方,因为presentPopoverFromBarButtonItem使用故事板时不使用。请注意,将 (5) 代入viewDidLoad不起作用。

祝你编码愉快!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 self.navigationItem (在 UINavigationController 内部)打开时,UIPopoverController 不会被关闭 的相关文章

  • 修补应用内购买黑客;卡在第四步

    正如我们许多人所知 苹果最近出现了一种情况 黑客可以免费获得任何应用内购买 苹果最近发布了这个文件 http developer apple com library ios releasenotes StoreKit IAP Receipt
  • 如何知道用户何时更改设置包

    我让用户在 iPhone 的设置区域中更改他们的设置 在下一次网络同步期间 我想将用户更改发送到服务器 但前提是做出改变 但是我如何知道用户何时在设置区域中进行了更改 如果可以的话 我想避免选择总是发送信息 无论是否更改 或者首先从服务器获
  • 如何打开定位服务

    当有人第一次拒绝时 如何从实际应用程序重新打开定位服务 我可以选择关闭或打开它 您只能提示他们在屏幕上打开定位服务 如下所示 UIApplication sharedApplication openURL NSURL URLWithStri
  • NSString – 静态还是内联?有性能提升吗?

    如果我写的话会有任何性能提升吗 NSString helloStringWithName NSString name static NSString formatString Hello return NSString stringWith
  • 如何在 Firebase 控制台中使用 Apple 新的 APN .p8 证书

    随着最近 Apple 开发者帐户的升级 我面临着一个困难 在尝试创建推送通知证书时 它为我提供了 p8 证书 而不是可以导出到 p12 的 APNs 证书 Firebase 控制台仅接受 p12 证书 那么我如何从这些新的 p8 证书中获取
  • 如何知道我的应用程序使用了多少 iCloud 空间?

    有没有办法查看我的应用程序正在备份到 iCloud 的内容以及它消耗了多少内存 Settings gt iCloud gt Storage Backup gt Manage Storage将显示正在备份的总计内容 iOS 会备份位于应用程序
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • GeoFire Swift 3 - 保存和更新坐标

    我正在尝试使用 GeoFire 将坐标存储到 Firebase 数据库中 我不确定如何更新新坐标 因为它们每秒都会更改 更新 随着childByAutoId 它正在为每辆自行车生成一个新的唯一 ID 如何引用这个唯一的自行车 ID 例如 用
  • 如何获取CATransition/Animation的结束事件?

    我的代码如下所示 CATransition transition CATransition animation transition duration duration 我希望得到CATransition Animation的结束事件 是否
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 如何禁用 iPhone 邮件应用程序中的电话号码链接?

    我的公司正在发送数字电子邮件收据 但遇到了 iPhone Mail 检测数字数据并将其自动链接为电话号码的问题 我已经看到元标记应该可以解决 iPhone 上的 Mobil Safari 中的问题 但该技巧似乎不适用于 Mail 有谁知道如
  • ios水平居中约束问题?

    I am having hard time in learning constraints auto layout in iOS I have used any width any height I have a storyboard sc
  • 如何让按钮闪烁?

    我试图在扫描正确时将按钮的颜色 只是闪烁 闪烁 更改为绿色 在出现问题时将按钮的颜色更改为红色 我可以用这样的视图来做到这一点 func flashBG UIView animateWithDuration 0 7 animations s
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个
  • Swift 中的 import 语句是否有相关成本?

    阅读字符串宣言 我看到一个段落 https github com apple swift blob master docs StringManifesto md batteries included关于避免Foundation不需要的时候导
  • Xcode 8 / Swift 3:“UIViewController 类型的表达式?未使用”警告

    我有以下函数 它之前编译得很干净 但在 Xcode 8 中生成警告 func exitViewController navigationController popViewController animated true UIViewCon
  • 在发生更改事件时将货币格式重新应用到 UITextField

    我正在使用一个包含本地化货币值的 UITextField 我看过很多关于如何使用此功能的帖子 但我的问题是 如何在每次按键后将货币格式重新应用到 UITextField 我知道我可以通过以下方式设置和使用货币格式化程序 NSNumberFo
  • iOS - UITableViewCell 使文本加粗

    我有一个字符串 NSString userInfo James Johnson james 我想做的就是大胆James Johnson并保留 james正常字体 所以我尝试过的是使用NSAttributedString但为了完成这个过程 我

随机推荐

  • GLUT 程序链接错误

    我想编译一个 GLUT 程序 include
  • 为什么我的 Android 模拟器键盘是汉字模式?

    我正在使用 AVD Android 虚拟设备 调试我的 Android 应用程序 当我尝试在文本字段中输入文本时 我的字符在 IME 中被解释为中文 我不知道如何进入此模式或如何退出它 我只想输入字母键 这是一个屏幕截图 如果你正在跑步mo
  • 有没有办法在Python字典中保留重复的键[重复]

    这个问题在这里已经有答案了 有没有办法在字典中存储重复的键 我有一个特定的要求来形成请求和响应对 从特定节点到另一个特定节点的请求形成相同的密钥 我需要存储这两个 但如果我尝试将它们添加到字典中 第一个将被第二个替换 有什么办法吗 假设您想
  • 如何使用 sql server 执行 BEFORE UPDATED 触发器?

    我正在使用 Sqlserver Express 但我做不到before updated扳机 还有其他方法可以做到这一点吗 MSSQL不支持BEFORE触发器 你最接近的是INSTEAD OF触发器 但它们的行为与BEFOREMySQL 中的
  • 如何在 C++ 中禁用 OS X App Nap?

    有没有办法从 C 应用程序的源代码中禁用 App Nap 我正在使用 clang 编译器和 cmake 以下 RAII 类 改编自这个答案 会做的 if defined APPLE if MAC OS X VERSION MAX ALLOW
  • 将临时名称空间附加到搜索路径

    这个问题是这个问题的后续post因为我仍然不完全相信 就代码的鲁棒性而言 打字不会更好namespace foo 习惯而不仅仅是打字foo 并祈祷你能得到想要的结果 实际问题 我知道这严重违反了 标准 R 约定 但我们只能说我很好奇 是否可
  • 如何在 Swift 中发出 HTTP 请求?

    I read 编程语言 Swift由 Apple 在 iBooks 中编写 但无法弄清楚如何在 Swift 中发出 HTTP 请求 类似于 cURL 我需要导入 Obj C 类还是只需要导入默认库 或者是否无法基于原生 Swift 代码发出
  • 处理另一个类/文件中定义的对象的事件

    我有一个 VB NET 程序 其中有多个表单和一些我想在所有表单上访问的变量 因此我创建了一个包含一些公共变量的模块文件 我发现虽然这些变量已经被声明WithEvents 如果不首先复制到局部变量 则无法在表单上处理它们的事件 正在发生的事
  • 在元组列表中获得最大并发的有效方法是什么?

    我一直在努力以有效的方式解决这个问题 问题是 问题陈述 给定以下形式的元组列表 start1 end1 start2 end2 start3 end3 startn endn 其中 start 和 end 是正整数 每个元组代表一个时间窗口
  • 如何让android支持屏幕右下角的FloatingActionButton?

    我添加了一个FloatingActionButton到我的布局里面RelativeLayout如下
  • IE中的z索引问题

    我有一张地图 上面有一些点 用户将鼠标悬停在上面即可显示更多信息 我遇到的问题很难解释 因为只有当用户在 IE 中查看页面并且该页面托管在我的服务器上时 它才似乎是一个问题 下面的 jsfiddle 页面上的完全相同的代码可以正常工作 ht
  • 获取对象属性之间的最小/最大值的快速方法

    我在 javascript 中有一个像这样的对象 a 4 b 0 5 c 0 35 d 5 有没有一种快速方法可以获取属性中的最小值和最大值 而不必循环遍历所有属性 因为我拥有的对象很大 我需要每两秒获取一次最小值 最大值 对象的值不断变化
  • Android:获取手机硬件信息

    我正在开发告诉用户有关设备的应用程序 我问了很多关于SO的问题但没有找到答案 我想找到 型号 安卓版本 基带版本 内核版本 内部版本号 内存 我的手机 我非常感谢任何有关此问题的帮助 我在我的代码中使用了这个 所以我把所有的 Log i T
  • ER 图中的关系属性

    实体关系图中的关系是否可以有自己的关键属性 如果没有 那么我们是否必须用这个密钥创建一个单独的实体 唯一拥有自己的密钥的关系是多对多关系 这种关系的关键自然是其每个父母的外键的组合 如果关系还有其他属性 那么它根本就不是关系 它本身就是一个
  • Tortoise SVN - 将主干合并到分支 - 树冲突

    我们使用的是 SVN 1 8 我也在使用 Tortoise SVN 1 8 主要代码位于 project trunk 我将要做一个大的改变 所以我创建了一个分支 project branches x那是的副本 project trunk 作
  • JTextArea的append()方法似乎不起作用

    我们被分配创建一个简单的编译器作为家庭作业 它将接受一组指令 包含变量 条件 跳转等 并对其进行评估 这已经完成了 但我想我应该让我的程序更加 闪亮 并添加从文本文件加载指令的能力 只是为了用户舒适 然而 似乎JTextArea s app
  • 具有“独特部分正则表达式”的高级“uniq”

    uniq是一个工具 可以一次过滤文件中的行 以便仅显示唯一的行 uniq有一些支持来指定两条线何时 等效 但选项有限 我正在寻找一个工具 扩展uniq允许人们输入正则表达式 如果两条线捕获的组相同 则两条线被视为 等效 对于每个等价类 仅返
  • Java:引用意味着多少内存?

    正如问题所说 Java 编程语言中对对象的引用使用了多少内存 请 如果您有可靠的来源就更好了 多谢 它不是由语言或 JVM 规范指定的 然而 人们普遍认为 任何合理的实现在 32 位机器上都是 4 字节 在 64 位机器上是 4 到 8 字
  • 执行带有超时的 shell 函数

    为什么这会起作用 timeout 10s echo foo bar foo bar 但这不会 function echoFooBar echo foo bar echoFooBar foo bar timeout 10s echoFooBa
  • 从 self.navigationItem (在 UINavigationController 内部)打开时,UIPopoverController 不会被关闭

    我在关闭从 UINavigationController 的 navigationItem 启动的弹出窗口时遇到问题 看来由 UINavigationController 插入的导航项不会触发 UIPopoverController 的解除