无法禁用 UITextView 中 UIMenuController 中的默认 UIMenuItems

2023-12-25

我正在尝试配置 U​​IMenuController 的菜单项以获得类似于 Medium 的 iOS 功能的功能:

有各种线程致力于此特定任务,但是尽管有数以万计的视图和不同的结果,包括它不适用于足够多的人......似乎没有一个始终有效的解决方案对于 UITextView。

我已经能够添加自定义菜单选项“printToConsole”,但我无法禁用Apple的标准菜单项,例如剪切,复制,粘贴,B I U, etc:

共识似乎是我应该重写 canPerformAction 以禁用这些默认菜单项,但这似乎不起作用:

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    print("canPerformAction being called")

    if action == #selector(cut(_:)) {
        return false
    }
    if action == #selector(copy(_:)) {
        return false
    }
    if action == #selector(select(_:)) {
        return false
    }
    if action == #selector(paste(_:)) {
        return false
    }
    if action == #selector(replacementObject(for:)) {
        return false
    }
    if action == #selector(selectAll(_:)) {
        return false
    }
    if action == #selector(printToConsole) {
        return true
    }

    return super.canPerformAction(action, withSender: sender)
}

这是我的相关代码的其余部分:

func addCustomMenu() {
    let consolePrintAction = UIMenuItem(title: "Print To Console", action: #selector(printToConsole))
    UIMenuController.shared.menuItems = [consolePrintAction]
    UIMenuController.shared.update()

}

@objc func printToConsole() {
    if let range = articleTextView.selectedTextRange, let selectedText = articleTextView.text(in: range) {
        print(selectedText)
    }
}

在我看来DidLoad:

articleTextView.delegate = self
addCustomMenu()

我也将 viewController 设置为符合 UITextViewDelegate 。有些人建议,如果您简单地对 TextView 进行子类化,这会以某种方式起作用。我无法让它发挥作用,所以如果这确实是答案,有人可以提供一个例子吗?

再说一遍,我知道这可能看起来像是重复的,但上述解决方案似乎已停止与 iOS 更新一起使用。

Thanks.


感谢 @gaurav 对这个问题的回答,我在寻找 SO 时一定没有注意到这个答案:https://stackoverflow.com/a/46470592/7134142 https://stackoverflow.com/a/46470592/7134142

关键的代码是这样的,它扩展了 UITextView,而不是子类化它:

extension UITextView {
open override func canPerformAction(_ action: Selector, withSender
    sender: Any?) -> Bool {
    return false
}

在我的视图控制器中重写 canPerformAction 是不必要的,上面的代码仍然允许您添加自定义菜单项。这就是我最终得到的结果:

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

无法禁用 UITextView 中 UIMenuController 中的默认 UIMenuItems 的相关文章

  • iOS 上的 OpenCV - VideoCapture 属性始终返回 1

    我一直在尝试构建一个简单的 OpenCV iOS 应用程序 该应用程序从捆绑包中加载视频并查询其帧数 持续时间等 然后它将尝试从中获取各个帧 不幸的是 当我使用VideoCapture类中 所有属性返回值 1 然后我尝试导航到frame 1
  • 在 hooks 文件夹中使用节点脚本时,cordova 插件安装问题

    Cordova 3 4 hooks 未在 iOS 中正确安装提到的插件 我正在添加install plugins js进入文件夹project project root hooks after platform add其中有以下代码 usr
  • 如何去掉 UIWebView 上的状态栏背景?

    从 iOS 11 开始 当UIWebView全屏时 状态栏上会出现与屏幕颜色相同的假背景UIWebView背景 有人知道如何摆脱它吗 甚至添加IUWebView到故事板并使其全屏将使状态栏背景出现 我一直在尝试编辑 UIWebView 的大
  • 启动深色或浅色模式的图像

    如何为深色模式和浅色模式选 择一组不同的启动图像 我有一个 LaunchImages 集 当应用程序启动时 会显示一个图像 对于浅色模式 这似乎不错 但是如果我尝试在设置为深色模式 iOS 13 的设备上打开我的应用程序 则该图像看起来很糟
  • 删除派生数据文件夹后,Xcode 不断重新创建派生数据文件夹

    自动完成功能在 Xcode 6 中不再起作用 我四处搜索 发现删除派生数据文件夹可以解决此问题 每次我删除它时 它都会回来 然后就不会再自动完成了 有什么建议么 Thanks 没关系 我解决了这个问题 我没有声明需要在类内的方法中使用的变量
  • HTML 分页

    有没有html分页的开源项目 我正在为 iPhone 开发一个应用程序 我想在 UIWebView 上显示 HTML 文件 并且不希望用户向下滚动以查看屏幕上未显示的剩余内容 我想在第二个 UIWebView 上显示剩余的内容 我怎样才能做
  • 为什么 UITableViewCell 不可访问(对于 VoiceOver)

    我并不是想解决任何问题 当然你可以设置isAccessibilityEnabled true它有效 我的问题是 为什么它默认关闭并且界面生成器中没有适当的部分 在我看来 不建议使 UITableViewCell 子类可访问 有没有更好的方法
  • 为 Swift 对象/属性设置观察者

    我一直在寻找一种在连接到 Mac 的显示器数量发生变化时触发方法的方法 我知道我可以获得 NSScreen screens count 的值 但我需要找到一种方法来在该值发生变化时创建通知或其他内容 或者指示所连接的显示器数量发生变化的其他
  • 如何向 UIView 添加大小调整手柄?

    我试图根据用户请求在运行时动态创建视图 UIImageView 和 UITextView 然后允许用户移动它们并调整它们的大小 除了调整大小之外 我的一切都工作得很好 我尝试使用捏合手势识别器 但发现它对于我想要的东西来说太笨拙了 因此 我
  • 如何重新定位或移动 Google Maps SDK 上的当前位置按钮?

    如何将 Objective C 中的当前位置按钮移至我的偏好 现在 我已启用它 但底角有东西挡住了它 Thanks 您可以使用 padding 将按钮向上移动 self mapView padding UIEdgeInsets top 0
  • 从 iOS 13 开始安排 iOS 后台任务

    我正在实现用于更新数据的BackgroundTasks 框架 但我遇到了以下问题 无法计划刷新App 错误域 BGTaskSchedulerErrorDomain代码 1 空 无法安排数据提取 Error Domain BGTaskSche
  • 以弯曲格式显示文本

    我正在寻找以曲线格式绘制一些文本 我使用哪个控件并不重要 UITextField UILabel or UITextView 我只想显示如图所示的文本 仍在寻找解决方案 请帮忙 查看此链接 https nodeload github com
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • 在 swift 中将简单字符串转换为 JSON 字符串

    我知道有一个同标题的问题here https stackoverflow com questions 30825755 convert string to json string in swift 但在那个问题中 他试图将字典转换为 JSO
  • 如何使用 Core Graphics 在我的触摸位置绘制一个圆圈?

    新程序员来了 我在尝试使用 Core Graphics 在触摸位置周围绘制描边弧时遇到问题 我有绘制圆圈的方法工作正常 并且我已经测试并在点击屏幕时注册触摸 但是当我尝试在点击时调用绘制圆圈的方法时 我收到错误 CG ContextBlah
  • 在视图之间传递核心数据实体变量

    我无法理解如何在视图之间使用核心数据实体变量 为了更好地理解我的问题是什么 我的代码如下 View A 基本上 您必须将完整预算实体或相关预算实体的 ID 从视图 A 传递到视图 B 由于不知道您的应用程序的视图层次结构和逻辑 我假设您选择
  • iOS 防止计时器 UILabel 在数字变化时“晃动”

    我有一个UILabel它以以下格式显示计时器的输出MM ss SS 分 秒 厘秒 但是随着厘秒宽度的变化 它从左向右 摇动 例如 11 比 33 窄 有什么办法可以减轻这种情况吗 我尝试过将其居中 给它固定的宽度 但它们似乎没有帮助 从iO
  • XCode 4.5 给我“SenTestingKit/SenTestKit.h”文件未找到,但适用于 4.4.1

    我刚刚安装了 XCode 4 5 它在我现有的项目之一上给了我一个 SenTestingKit SenTestingKit h 文件未找到错误 此错误仅发生在 XCode 4 5 中 但它在 4 4 1 上编译正常 我已经检查过SenTes
  • NSCFData fastCharacterContents 崩溃? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前在控制台中收到此崩溃日志 20
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部

随机推荐

  • jQuery 滑块作为时间线

    我刚刚完成了 jQuery 手风琴与 jQuery 滑块的合并 IE 显示 3 张图片 用户可以使用PREV or NEXT按钮可查看下一张 上一张 3 张图像 他们还可以使用滑块浏览所有图像 下一步是使这个滑块看起来像时间线 左侧需要从
  • 我应该使用哪个(对于基于 python 的网站)? sass、compass、switchcss...替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 组织 CSS 的最佳系统是什么 我正在制作几个使用 python 作为后端脚本的网站 我有兴趣使用一些东西来帮助我组织长 css 脚本 我
  • 使用 Jackson 反序列化包装列表

    我有一个像这样的 JSON 对象 geonames countryId 2017370 adminCode1 73 countryId 2027370 adminCode1 71 我怎样才能反序列化这个对象DIRECTLY to List
  • 如何在 Spring 应用程序上下文中将 Class 设置为属性值?

    有没有办法配置 spring 应用程序上下文 以便它将使用 Class 类型的值初始化 setter 我需要初始化该结构 Map
  • 将 RTSP 流转换为虚拟网络摄像头

    我正在尝试使用来自 IP 摄像机的 RTSP 流作为 Windows 上各种应用程序 例如 Skype Zoom Microsoft Teams 等 的视频输入源 到目前为止我找到的唯一解决方案是使用 webcam 7 http www w
  • std::weak_ptr:锁或shared_ptr构造函数?

    似乎有两种方法可以暂时获取 a 所指向的资源的所有权weak ptr Use lock 通过weak ptr to a shared ptr构造函数 这两者都会产生一个shared ptr 锁返回一个nullptr在这种情况下weak pt
  • 动态设置线性布局背景

    我想通过以下方式动态设置线性布局背景 通过 XML 解析从 Web url 获取图像 然后将该图像存储到 SD 卡中 现在图像已保存到 SD 卡中 将该图像设置为应用程序中的线性布局背景 现在我陷入了第三步 有人可以帮忙吗 用这个 Bitm
  • 在Thread中使用EnterCriticalSection更新VCL标签

    我是线程新手 我正在使用一个第三方库 该库使用线程 有时会调用我提供的过程 当线程调用我的过程时 如何更新 TLabel Caption 如果我在其他地方调用了InitializeCriticalSection 它是否像 EnterCrit
  • 光源设置不正确

    我有这段代码 但灯光似乎无法正常工作 当我渲染对象时它很暗 然后当我旋转它时 光源似乎也旋转了 我不知道问题出在哪里 我尝试修改灯光模型但仍然不起作用 这是程序 while glfwWindowShouldClose window Rend
  • Javascript递归设置超时

    我刚刚开始研究 javascript 所以希望这会是简单的事情 我想制作自动播放的图像幻灯片 这非常简单 并且有一些关于它的教程 但由于某种原因我无法让它工作 这就是我所拥有的 var image1 new Image var image2
  • WPF列表框滚动到底部

    我使用 ObservableCollection 作为 listBox 组件的 ItemSource 但控件的行为对我来说并不合适 我已经向下滚动到这件事在我的收藏中第一次出现 但不是最后一次 示例列表为 1 1 2 3 4 5 6 7 8
  • XSLT PI 和样式表参数

    给定一个需要参数的 XSLT 1 x 样式表 是否有任何方法可以将其与指定参数值的 XML 文档关联起来 我阅读了样式表 PI 的 W3C 规范文档 并得到了答案是 否 的印象 但当我读完时 我遇到了急性 BNF 中毒的情况 因此可能错过了
  • 行主与列主矩阵乘法

    我目前正在开发一个 C 程序 尝试计算矩阵乘法 我通过循环第二个矩阵的每一列来完成此任务 如下所示 我已将大小设置为 1000 for i 0 i
  • 如何找出坐标之间的距离?

    我想让它显示两个 CLLocation 坐标之间的距离 有没有办法在没有复杂数学公式的情况下做到这一点 如果没有 你会如何用公式来做呢 CLLocation 有一个 distanceFromLocation 方法 因此给定两个 CLLoca
  • Java HTML->PDF 解决方案?

    我目前正在用 Java 构建一个基于 PDF 的报告 我已经研究过 iText 和 BIRT 但似乎需要付出很大的努力来学习他们的 API 我试图找到一个解决方案 让我可以在 HTMl 中生成报告 我已经知道的东西 并将其输出为 PDF 谁
  • AngularJS 和解析正文

    我正在尝试使用 AngularJS 创建一个网站 由用户生成的内容驱动 可以使用自定义标签 例如 js code js code 以不同方式显示这些部分内的文本 API 向我发送一个包含标签的正文文本字符串 以便在客户端上进行解析 如果我使
  • 在symfony2中实现日志系统

    我想将一个日志文件集成到我用 symfony2 制作的网站中 我的意思是我想保存用户的每个操作 点击按钮 将请求保存到数据库 那可能吗 有人对此有什么想法吗 登录 Symfony 2 是的 文档中确实描述了这一点 Symfony 2 Coo
  • 移动应用程序中的幽灵点击

    有很多关于幽灵点击的材料 帖子 我正在努力更好地理解它 所以我的理解是 幽灵点击的原因是click触摸事件后约 300 毫秒调度事件 jQuery Mobile 建议 http jquerymobile com test docs api
  • JQuery 文本编辑器粘贴而不带格式

    我在我的网站上使用插件 JQuery 文本编辑器 有时 当用户将预先格式化的 HTML 文本从另一个网站复制并粘贴到插件的文本框中时 它会错误地呈现并中断部分字符串 从数据库检索后可以看到损坏的文本 如果您手动编写此文本 或从框中复制并重新
  • 无法禁用 UITextView 中 UIMenuController 中的默认 UIMenuItems

    我正在尝试配置 U IMenuController 的菜单项以获得类似于 Medium 的 iOS 功能的功能 有各种线程致力于此特定任务 但是尽管有数以万计的视图和不同的结果 包括它不适用于足够多的人 似乎没有一个始终有效的解决方案对于