2016-12-07 12 views
0

私はとWKWebViewを使用しています。リンクを長く押した後に表示されるWKActionSheetを傍受しようとしています。宣言されていないタイプのWKActionSheetの使用

は私のルートビューコントローラでは、私はpresent(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil)を実装:

override func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) { 

    print("View controller to present: \(viewControllerToPresent)") 

    super.present(viewControllerToPresent, animated: flag, completion: completion) 
} 

Iリンク上で長押し、私は私のコンソールに関連するログを見ることができた場合:

View controller to present: <WKActionSheet: 0x13616b200>

しかし、もしを私はviewControllerToPresentWKActionSheetであるかどうかを確認しようとすると、このエラーメッセージが表示されます。

Use of undeclared type WKActionSheet

だからこのWKActionSheetはプライベートAPIに属していますか?そのクラスにアクセスする方法はありませんか?

viewControllerToPresentがきれいな方法でWKActionSheetであるかどうかをどのように判断できますか?今のところ私はviewControllerToPresent.descriptionを使用していて、それに文字列 "WKActionSheet"が含まれているかどうかを確認します。それは大丈夫だけどかなり汚いです...

答えて

0

誰かが興味があれば、ここに私の回避策があります。

override func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) 
{ 
    guard let alertController = viewControllerToPresent as? UIAlertController, 
     alertController.preferredStyle == .actionSheet, alertController.description.contains("WKActionSheet") 
     else { 
      super.present(viewControllerToPresent, animated: flag, completion: completion) 
      return 
    } 

    guard let longPressedLink = alertController.title 
     else {return} 

    // Here I call a custom method to create my own UIAlertController 
    let customAlertController = getCustomAlertControllerFromLink(link: longPressedLink) 
    super.present(customAlertController, animated: flag, completion: completion) 
} 
関連する問題