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
}
Другие вопросы по тегам