我有UITextView,我想在其中添加高亮作为自定义菜单项。我已注册以下通知UIMenuControllerWillShowMenuNotification
。
通知方法如下:
if textIsHighlighted {
let highlightMenuItem = UIMenuItem(title: "Highlight", action: Selector("highlightText"))
UIMenuController.sharedMenuController().menuItems = [highlightMenuItem]
}
else {
let highlightMenuItem = UIMenuItem(title: "Dehighlight", action: Selector("highlightText"))
UIMenuController.sharedMenuController().menuItems = [highlightMenuItem]
}
虽然menucontroller第一次无法更新,即使它执行了部分代码。它显示了最后一个值。我应该在哪里编写这部分代码,因为我觉得在willShow menuController中它已经创建,因此无法更新。
答案 0 :(得分:0)
希望你现在已经解决了这个问题,但我自己也想出了这个问题:
其他答案说你可以在调用UIMenuControllerWillShowMenuNotification
时添加菜单项来更新菜单项,但这对我来说并不适用(iOS 9,Swift 2)。
相反,我实施了UITextView
委托方法:textViewDidChangeSelection
并在那里设置了相关的菜单项:
func textViewDidChangeSelection(textView: UITextView) {
if self.currentSelectionIsInHighlightedRange() {
self.setUpUnhighlightMenuItem()
} else {
self.setUpHighlightMenuItem()
}
}
private func currentSelectionIsInHighlightedRange() -> Bool {
let allHighlightedRanges = self.document.highlightedRanges()
let selectedTextRange = self.documentView.textView.selectedRange
for range in allHighlightedRanges {
let intersectionRange = NSIntersectionRange(range, selectedTextRange)
if intersectionRange.length > 0 {
return true
}
}
return false
}