【发布时间】:2016-10-05 23:44:13
【问题描述】:
我正在尝试覆盖默认的UIMenuController,这样当用户在其文本视图中选择文本时,只会出现我的自定义项“定义...”。到目前为止,我在网上找到的方法都不太走运。
更具体地说,我将UIViewController 子类化并使用canPerformAction() 排除除我的define 方法之外的所有操作。
override func becomeFirstResponder() -> Bool {
return true
}
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
let canPerform: Bool
if action == #selector(defineWord){
canPerform = true
}
else {
canPerform = false
}
print("action = \(action), canPerform = \(canPerform)")
return canPerform
}
在视图控制器的viewDidLoad() 中,我包含了以下内容:
let shared = UIMenuController.shared
let menuItemDefine = UIMenuItem(title: "Define...", action: #selector(self.defineWord))
shared.menuItems = [menuItemDefine]
每当我在视图中选择文本时,控制台都会检查UIMenuController 中可能出现的每个可能的操作,并表示它们无法执行,但我的自定义操作除外:
action = cut:, canPerform = false
action = select:, canPerform = false
(and so on, until...)
action = defineWord, canPerform = true
但生成的编辑菜单包含“复制”、“查找”、“共享”和“定义...”。这些没有出现在控制台中,这让我觉得需要一种不同的方法。
请注意,我也尝试过对UITextView 进行子类化并酌情使用上述代码,但结果是一样的。
任何想法我哪里出错了?
【问题讨论】:
-
你有解决办法吗?
标签: ios swift uimenucontroller