2015-10-06 2 views
3

У меня есть UITextView, на котором я хочу добавить подсветку в качестве пользовательского пункта меню. Я зарегистрировался на следующее уведомление UIMenuControllerWillShowMenuNotification.UIMenuController не обновляет меню в первый раз

Способ уведомления что-то вроде этого:

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 не удается обновить, даже если он выполняет часть кода. Он показывает последнее значение. Где я должен писать эту часть кода, поскольку я чувствую, что во время showChow menuController он уже создан и, таким образом, не обновляется.

ответ

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 
} 
+0

спасибо. Эта проблема слишком старая, поэтому я не помню проблему сейчас, но надеюсь, что ваше решение будет правильным. Я принимаю это. – meteors