2017-10-28 183 views
0

讓我更加清楚。我有一個兼容macOS 10.8+的應用程序,但是如果用戶使用macOS 10.10+,我想要使用WKWebView,以便爲他/她提供更好的體驗。在macOS 10.8+兼容應用程序中聲明WKWebView委託人

我創建了一個基於NSView的類,如果用戶使用的是macOS 10.9或更低版本,應自動添加WebView;如果使用10.10或更高版本,則應自動添加WKWebView。當我需要聲明WKWebView導航和UI代表時,問題就出現了。

我可以添加的WebView委託功能,沒有任何麻煩:

-(WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request; 

-(void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation 
     request:(NSURLRequest *)request frame:(WebFrame *)frame 
          decisionListener:(id<WebPolicyDecisionListener>)listener; 

不過,我需要聲明下面的功能,能夠控制WKWebView流程以及:

- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration 
    forNavigationAction:(WKNavigationAction *)navigationAction 
     windowFeatures:(WKWindowFeatures *)windowFeatures; 

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction 
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler; 

然而,兩者的使用起來,WKWebViewWKWebViewConfigurationWKNavigationActionWKWindowFeaturesWKNavigationActionPolicy,是不具備在MacOS的10.9及以下。

總部設在我與NSUserNotificationCenter的經驗,我知道,如果我宣佈與這些對象的功能,它的應用程序將立即崩潰的推出在MacOS上10.8和10.9,因爲這些類不可用。我怎樣才能避免這種情況?

回答

0

我找到了解決我的問題的方法。在Objective-C選擇不考慮類型,所以我宣佈與更原始的類WKWebView需要的功能,這是由原有的繼承:

- (id)webView:(id)webView createWebViewWithConfiguration:(id)configuration 
            forNavigationAction:(id)navigationAction 
              windowFeatures:(id)windowFeatures; 

- (void)webView:(id)webView decidePolicyForNavigationAction:(id)navigationAction 
              decisionHandler:(void (^)(NSInteger))decisionHandler; 

既然不能添加協議視圖類(自它們在macOS 10.9中也不存在) - 我收到一些警告,但這是一個不同的問題。上面的代碼工作,並與MacOS 10.8和10.9兼容,就像我想要的。