2016-06-21 6 views
4

사용자가 텍스트를 선택할 때마다 uiwebview에 메뉴 항목을 표시해야합니다. enter image description here기본 이외의 사용자 지정 항목 만 사용하여 사용자 지정 UIMenuController를 만드는 방법은 무엇입니까?

나는

let highlightMenuItem = UIMenuItem(title: "Highlight", action: #selector(ViewController.hightlight)) 

UIMenuController.sharedMenuController().menuItems = [highlightMenuItem] 

을 시도했지만 이것은 단지 기본 하나를 기존보다 메뉴 항목을 추가합니다. 이

enter image description here enter image description here

로, 하이라이트를 복사 주 메뉴 항목 만 이것을 달성하기 위해 밖으로 어떤 방법이 있습니까?

답변

7

UIWebView을 서브 클래 싱하고 canPerformAction (스위프트 3)을 오버라이드하여이를 수행 할 수 있습니다. 그런 다음 비활성화하려는 작업에 대해 false을 반환하면됩니다.

예 : 당신은 질문이있는 경우

class EditedUIMenuWebView: UIWebView { 

    override func canPerformAction(_ action: Selector, withSender sender: AnyObject?) -> Bool { 
    if action == #selector(cut(_:)) { 
     return false 
    } 
    if action == #selector(paste(_:)) { 
     return false 
    } 
    if action == #selector(select(_:)) { 
     return false 
    } 
    if action == #selector(selectAll(_:)) { 
     return false 
    } 
    ... 

    return super.canPerformAction(action, withSender: sender) 
    } 

} 

문의하시기 바랍니다!

편집하면 모든 작업을하지 않으려면하지만 단지 canPerformActionfalse를 반환하고과 같이 원하는 것들에 대한 true를 돌려 쉽게 할 수있는 몇 가지 :

override func canPerformAction(_ action: Selector, withSender sender: AnyObject?) -> Bool { 
    if action == #selector(copy(_:)) || action == #selector(customMethod(_:)) { 
    return true 
    } 
    ... 
    return false 
} 
+0

내 편집을 참조 @Nitesh. – Ike10

+0

고마워요 @ Ike10, 편집을 위해, 네, 이것은 다른 접근법을 무시하는 좋은 접근법입니다. 우리의 관습을 지키기 위해서입니다. – Nitesh

+0

복사 작업을 필터링하려면이 기능이 작동하지 않습니다. 복사 동작을 필터링하려면 자신의 menucontroller를 표시해야합니다. –