【问题标题】:How to disable Share and Look up in UITextView如何在 UITextView 中禁用共享和查找
【发布时间】:2022-06-10 22:37:25
【问题描述】:

我试图隐藏除copy 和两个原始菜单之外的文本菜单。

我使用以下代码来隐藏几乎所有内容...但不知何故,我无法隐藏 look upshare(以及 SpellSpeak,添加于 6 月 10 日)。

  override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    if  action == Selector(("_lookup:")) ||
        action == Selector(("_share:"))
    {
        return false
    } else  if
        action == #selector(UIResponderStandardEditActions.copy(_:)) ||
            action == #selector(copyAll(_:))  ||
            action == #selector(lookUpWord (_:))
    {
        return true
    } else {
    
    return false
    }
}

我调试了代码并见证了当 lookupshare 进入 if 语句时函数确实返回 false。但是,不知何故,这并没有反映在菜单上。

如何确保禁用 look upshareSpellSpeak

-----更新----

修改为扩展 但不知何故仍然没有按照我想要的方式工作。菜单不反映此扩展中的代码...

   extension UITextView {
    open override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if  action == Selector(("_lookup:")) ||
                action == Selector(("_share:"))
        {
            return false
        } else  if
            action == #selector(UIResponderStandardEditActions.copy(_:)) ||
                action == #selector(ViewController.copyAll(_:))  ||
                action == #selector(ViewController.lookUpWord (_:))
        {
            return true
        } else {
            
            return false
        }
    }
}

【问题讨论】:

  • 你在哪里调用 canPerformAction?
  • 我把这段代码放在ViewController 中,没有继承UITextView。我需要子类化吗?
  • 尝试把它放在 UITextView 的扩展中。
  • 谢谢!我试着把它作为一个扩展。但不知何故仍然没有按照我想要的方式工作。菜单不反映此扩展中的代码。你能看看我编辑的问题,看看我哪里做得不对吗?
  • 您只想排除查找和共享?

标签: swift menu uitextview


【解决方案1】:
  1. 您可以使用您想要的自定义实现创建 UITextView 的子类。

  2. 要禁用查找,您需要使用Selector (("_define:"))

这是一个禁用 ShareLookup 选项的示例:

class CustomTextView: UITextView {
    
    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        let canPerformAction = super.canPerformAction(action, withSender: sender)
        
        let shareAction = NSSelectorFromString("_share:")
        let lookUpAction = NSSelectorFromString("_define:")
        
        if canPerformAction && action == shareAction {
            // Set true/false based on your requirement
            return false
        }
        
        if canPerformAction && action == lookUpAction {
            return false
        }
        
        return canPerformAction
    }
}

并将其用作:

class YourViewController: UIViewController {
    
    @IBOutlet weak var yourTextView: CustomTextView!
}

【讨论】:

  • 一个快速的后续问题,如果可以的话。我们怎么知道可以通过指定NSSelectorFromString("_define:"),尤其是_define 部分来捕获查找?我在我的 iPhone 上试过这个,我可以看到 SpellSpeak 出现了,但我不知道如何以与 NSSelectorFromString("_define:") 类似的方式捕捉它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多