2015-10-06 71 views
3

我有UITextView,我想在其上添加高亮作爲自定義菜單項。我已註冊以下通知UIMenuControllerWillShowMenuNotificationUIMenuController不會第一次更新菜單

的通知的方法是這樣的:

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

希望你現在已經解決了這個問題,但我只是自己想出了這個問題: 其他回答說你可以在調用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

相關問題