UIMenuController 未在 textView 中显示

Posted

技术标签:

【中文标题】UIMenuController 未在 textView 中显示【英文标题】:UIMenuController not showing in textView 【发布时间】:2016-12-14 01:08:12 【问题描述】:

我正在尝试启用在 UITextView 中激活的自定义 UIMenuController。在我的 viewDidLoad() 中,我有以下代码:

override func viewDidLoad() 
    super.viewDidLoad()
    self.noteTextView.delegate = self
    let tapGesture = UITapGestureRecognizer.init(target: self, action: #selector(enableCustomMenuControllerAtTap(_:)))
    self.noteTextView.addGestureRecognizer(tapGesture)

处理手势的方法是:

func enableCustomMenuControllerAtTap(_ gesture: UITapGestureRecognizer) 
    print("tap")
    view.becomeFirstResponder()
    let OP1MenuController: UIMenuController
    OP1MenuController = UIMenuController.shared

    let font = UIMenuItem(title: "Font", action: #selector(pickFont))
    let color = UIMenuItem(title: "Color", action: #selector(pickColor))
    OP1MenuController.menuItems = [font, color]

    let point = gesture.location(in: view)
    OP1MenuController.setTargetRect(CGRect(x: point.x, y: point.y, width: 200, height: 200), in: view)

    OP1MenuController.arrowDirection = UIMenuControllerArrowDirection.down
    OP1MenuController.setMenuVisible(true, animated: true)

接下来我实现了这些方法,正如我在许多指南中看到的那样:

func pickFont(sender: UIMenuItem) 



func pickColor(sender: UIMenuItem) 



override var canBecomeFirstResponder: Bool 
    return true


override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool 
    if action == Selector(("pickFont")) || action == Selector(("pickColor"))
    
        if (noteTextView.selectedRange.length > 0) 
            return true
        
    
    return false

谁能告诉我为什么菜单不显示?任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

好的,菜单没有显示,因为我在 canPerformAction() 方法中使用了不同类型的选择器。我必须使用 #selector(method) 类型来实现和显示我的自定义菜单项操作。

【讨论】:

以上是关于UIMenuController 未在 textView 中显示的主要内容,如果未能解决你的问题,请参考以下文章

在 UIMenuController 出现之前更改用于 UIMenuController 的标签标题

何时使用 UIMenuController

UIMenuController 没有出现

UIMenuController

UIMenuController

使用 uimenucontroller 时遇到问题