2017-08-12 2 views
0

でUIMenuControllerのデフォルトの項目を削除します。どのように私は具体的に2つを削除し、私のカスタム1つを維持するだろう。ここで はどのようにアイテム<strong><em>ルックアップ</em></strong> & <strong><em>シェア... UIMenuControllerから</em></strong>を削除しようとしているスウィフト

override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 

     // add two custom menu items to the context menu of UIWebView (assuming in contenteditable mode) 


     let menuItem1 = UIMenuItem(title: "My Button", action: #selector(myButtonSel)) 
     UIMenuController.shared.menuItems = [menuItem1] 

    } 

は、私が持っているcanPerformActionである:ここで私はこれまで達成してきたものである私は、すべてのデフォルトの項目を削除し、維持しようとすると、いくつかの奇妙な理由でも

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 

     //let shareSelector: Selector = NSSelectorFromString("_share:") 

     if webView?.superview != nil { 
      if action == #selector(myButtonSel){ 
       return true 
      } 
     } 

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

だけの私カスタム、それは動作しません。

override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool { 

    //let shareSelector: Selector = NSSelectorFromString("_share:") 

    if webView?.superview != nil { 
     if action == #selector(myButtonSel){ 
      return true 
     } 
     else { 

      return false 
     } 
    } 

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

私は他のすべての項目を削除し、私のカスタムを維持しようとしても、私はそうすることはできませんよ:ここで私はそのために試みられたコードです。私ができることは、私のカスタムアイテムを追加することだけです。

+0

SIGBARTエラーが発生しましたか?その場合は、右のメニューの[接続インスペクタ]タブを確認してください。ストーリーボードやコードから削除した名前がいくつか表示されていても、まだそこに残っている場合は、Connections Inspectorからテーマを削除する必要があります。 – KuboAndTwoStrings

+0

@ KuboAndTwoStringsいいえ、エラーは発生しませんでしたが、私のカスタムメニューは機能しますが、UIMenuController項目を削除したようには見えません。コードは、削除しようとするたびに無視されます。 – MGames

答えて

1

私はこれを試しましたが、WebViewをサブクラス化してcanPerformActionメソッドをオーバーライドすることで機能しました。その中でデフォルトオプションを手動で削除しました。

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) 
    } 

私はIke10によってthis答え呼ばれ、それが私のために働いていました。試してみます。

+0

docs:https://developer.apple.com/documentation/uikit/uiwebviewの下に、拒否されずに他の方法がありますか?下部には、UIWebViewをサブクラス化しないでください。 – MGames

+0

また、選択したテキストを確認する方法もあります。これはうまくいきません:WebViewHere.stringByEvaluatingJavaScript(from: "window.getSelection()。toString();" – MGames

+1

これで、いくつかの調査の後、UIWebViewをサブクラス化するというポリシーに違反していないことがわかりました。 ViewControllerから関数を呼び出すためにNSNotificationを使用しました – MGames

関連する問題

 関連する問題