Swift `UIMenuController` 自定义操作

标签 swift lookup uimenucontroller textkit

我已经使用 TextKit 实现了自定义 TextView 。另外,我还使用 UILongPressGesture 实现了自定义文本选择。我在使用标准弹出菜单 UIMenuController 复制选定文本方面取得了进展。

我想实现自定义文本定义。要么覆盖标准定义操作(不知道它是否存在),要么使用自定义 UIMenuItem

到目前为止,我有以下内容:

@objc func longTap(sender: UILongPressGestureRecognizer) {
    ...
    becomeFirstResponder()
    let copyItem = UIMenuItem(title: "Copy", action: #selector(copySelector))
    let defineItem = UIMenuItem(title: "Define", action: #selector(defineSelector))
    UIMenuController.shared.menuItems = [copyItem, defineItem]
    UIMenuController.shared.setTargetRect(...)
    UIMenuController.shared.setMenuVisible(true, animated: true)
}

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
    if action == #selector(CenterViewController.copySelector) {
        return true
    } else if action == #selector(CenterViewController.defineSelector) {
        return true
    }
    return false
}

....

@objc func defineSelector() {
    // Use device's dictionary? 
    // ??
    customTextView.clearSelection()
}

这里的问题是:如何实现defineSelector

我到处寻找,但没有答案。 有没有办法使用字典并呈现带有定义的模态视图?因为它是由系统使用任何选定的文本完成的。

最佳答案

没关系,我找到了解决方案:

@objc private func defineSelector() {
    if let text = textToCopy {
        let txt = UITextView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
        txt.isHidden = true
        view.addSubview(txt)
        txt.text = text
        txt.isEditable = false
        txt.becomeFirstResponder()
        txt.selectedRange = NSRange(0..<text.count)
        let selector = Selector(("_define:"))
        if txt.canPerformAction(selector, withSender: nil) {
            txt.perform(selector, with: nil)
        }
        txt.removeFromSuperview()
    }
    customTextView.clearSelection()
}

关于Swift `UIMenuController` 自定义操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53318667/

相关文章:

swift - 将 CGImageRef 保存到 png 文件?

ios - 将 UILabel 位置更改为 CGPath 的 strokeEnd

swift - 在 Swift 中通过 IF 语句设置变量值

python - 具有快速前缀搜索的只读字符串列表(大约 100,000)的最有效数据结构

java - 使用键复合键进行高效的 HashMap 检索(由 2 个枚举构建)

swift - 在文本字段中快速进行 3D 触摸时关闭编辑菜单

ios - 为特定的 UITextView 添加 UIMenuItem?

iphone - UIMenuController 没有出现

json - 使用 swift 发布 json

具有查找字段的 SharePoint 列表项 - 移动/复制到不同的网站集