【问题标题】:UIMenuController do not hide system itemsUIMenuController 不隐藏系统项
【发布时间】:2018-01-27 03:21:32
【问题描述】:

我以这种方式在 uiviewconroller 中显示 UIMenuController:

在我的课堂上:

override open func canBecomeFirstResponder() -> Bool {
    return true
}

open override func canPerformAction(_ action: Selector, withSender sender: Any) -> Bool {

    //here I check for my custom action, else return false
    return false
}

然后显示我使用:

//Make this as first responder
    self.becomeFirstResponder()

    ///Build menu
    let menu = UIMenuController.shared
    ///Set item and anchor point, and showit
    menu.menuItems  = itemsToAdd
    menu.setTargetRect(CGRect(x: 0, y: 5, width: bubbleNode.view.bounds.size.width, height: bubbleNode.view.bounds.size.height), in: bubbleImageNode.view)
    menu.setMenuVisible(true, animated: true)

问题是在设备中我显示我的自定义项目,而且:“拼写,说话,斑点句子,ecc...”我该如何禁用它?

【问题讨论】:

  • 菜单没有会员代表
  • 你的控件是 UITextView 吗?
  • 是ASCellNode,一个来自AsyncDisplayKit的collectionviewcell

标签: ios swift uimenucontroller


【解决方案1】:

覆盖 canPerformAction 并为每个特定操作处理它。它非常适合我。

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

        var canPerform = super.canPerformAction(action, withSender: sender)

        if (action == "your action to restrict") {
              canPerform = false
        }

        return canPerform
    }

【讨论】:

  • 同样的错误...我看到加载视图后,如果我长按视图,我只看到我的自定义项目,1 或 2 秒后,如果我再次长按我看到我的物品和系统物品
【解决方案2】:

好的,问题是我设备中的“辅助功能”选项“说话选择”,如果我禁用它,我只会看到自定义项目,但在其他应用程序中我只会看到启用此选项的自定义项目!

【讨论】:

    【解决方案3】:

    如果您在 UIMenuController 中看到 speak 选项,该选项来自设备,请转到:

    设置->辅助功能->语音->语音

    选择并禁用它。自动朗读选项将从菜单中删除。

    【讨论】:

      【解决方案4】:
      class TextViewWithCopyAction: UITextView {
      
          override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
              if action == #selector(copy(_:)){
                  return true
              } else {
                  return false
              }
              
          }
      }
      

      使用它:

      let textView: TextViewWithCopyAction = {
          let textView = TextViewWithCopyAction()
          textView.backgroundColor = .white
          return textView
      }()
      

      【讨论】:

        猜你喜欢
        • 2014-03-12
        • 2019-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-04
        相关资源
        最近更新 更多