UIMenuController не обновляет меню в первый раз
У меня есть 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]
}
Хотя в первый раз не удается обновить контроллер меню, даже если он выполняет часть кода. Это показывает последнее значение. Где я должен написать эту часть кода, поскольку я чувствую, что во время willShow menuController он уже создан и, следовательно, не обновляется.
1 ответ
Надеюсь, вы уже решили это, но я только что понял это сам: в других ответах говорилось, что вы можете обновить пункты меню, добавив его, когда 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
}