2015-02-18 7 views
10

मेरे पास मेरे आवेदन में एक वेबव्यू है और मैं वेब दृश्य के बजाय सफारी में खोलने के लिए वेब दृश्य में कोई भी लिंक चाहता हूं।मैं एक्सकोड में सफारी में खुले वेबव्यू के भीतर कोई लिंक कैसे बना सकता हूं?

मैं तेजी से आवेदन कोडिंग कर रहा हूं, और उद्देश्य-सी के लिए कुछ जवाब देखे हैं लेकिन तेजी से कोई नहीं।

क्या कोई जानता है कि मैं ऐसा करने के बारे में कैसे जा सकता हूं?

उत्तर

36

यह Obj सी में के रूप में स्विफ्ट में अनिवार्य रूप से एक ही तरह से किया जाता है:

पहले, घोषणा करते हैं कि आपके विचार नियंत्रक UIWebViewDelegate

class MyViewController: UIWebViewDelegate 

के अनुरूप फिर अपने दृश्य नियंत्रक में webViewShouldStartLoadingWithRequest:navigationType: लागू:

// Swift 1 & 2 
func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    switch navigationType { 
    case .LinkClicked: 
     // Open links in Safari 
     UIApplication.sharedApplication().openURL(request.URL) 
     return false 
    default: 
     // Handle other navigation types... 
     return true 
    } 
} 

// Swift 3 
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    switch navigationType { 
    case .linkClicked: 
     // Open links in Safari 
     guard let url = request.url else { return true } 

     if #available(iOS 10.0, *) { 
      UIApplication.shared.open(url, options: [:], completionHandler: nil) 
     } else { 
      // openURL(_:) is deprecated in iOS 10+. 
      UIApplication.shared.openURL(url) 
     } 
     return false 
    default: 
     // Handle other navigation types... 
     return true 
    } 
} 

अंत में, अपने UIWebView के प्रतिनिधि को सेट करें, उदाहरण के लिए, viewDidLoad में या अपने स्टो में ryboard:

webView.delegate = self 
+0

ठीक है के लिए अपडेट किया गया। केवल एक बिट मैं इसे 'क्लास MyViewController: UIWebViewDelegate' नहीं समझता। मैं इसके साथ क्या करूं? धन्यवाद – crossboy007

+1

स्विफ्ट में, आप घोषणा कर सकते हैं कि कक्षा का नाम कक्षा के बाद प्रोटोकॉल नाम जोड़कर आपकी कक्षा प्रोटोकॉल के अनुरूप होती है ([दस्तावेज़ देखें] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/ Swift_Programming_Language/Protocols.html # // apple_ref/doc/यूआईडी/TP40014097-CH25-ID267))। आपके मामले में, शायद यह 'क्लास MyViewController: UIViewController, UIWebViewDelegate {... वर्ग में सामान ...} ' –

+0

धन्यवाद @RonaldMartin, यह आकर्षण की तरह काम करता है, आपको बहुत धन्यवाद –

3

आपको अपने वेब व्यू के प्रतिनिधि पर webViewShouldStartLoadingWithRequest:navigationType विधि को लागू करने और सफारी में जो लिंक खोलना है, उसे ढूंढने की आवश्यकता है। यदि आप ओएस को [[UIApplication sharedApplication]openURL:] के साथ भेजते हैं तो वे सफारी में खुल जाएंगे।

6

तेज 3

func webView(_: UIWebView, shouldStartLoadWith: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    if navigationType == UIWebViewNavigationType.linkClicked { 
     UIApplication.shared.open(shouldStartLoadWith.url!, options: [:], completionHandler: nil) 
     return false 
    } 
    return true 
} 
संबंधित मुद्दे