2016-06-21 21 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(Swift 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を返すために容易になることがあります。私の編集を参照@Nitesh

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

。 – Ike10

+0

ありがとう@ Ike10、編集のため、はいこれは他のアクションを無視する良い方法です。私たちの習慣を保つだけです。 – Nitesh

+0

コピーアクションを除外するには、これは機能しません。コピーアクションをフィルタリングするには、独自のメニューコントローラを表示する必要があります –

関連する問題