Mat*_*ler 4 safari xcode uiwebview ios
我正在尝试开发一个在Swift中使用UIWebView的iOS应用程序,但是我需要它只能使用一个域,并且在UIWebView中点击的任何外部链接都可以在Safari中打开.(EG所有链接http://example.com将在UIWebView中打开,但链接http://twitter.com将在Safari中打开).
我在网上找到了几个解决方案但是唯一的Swift版本(在这里找到:Safari中的UIWebView开放链接)可以打开Safari中的每个链接,我只想要外部的这样做.
有人可以帮忙吗?谢谢.
由于@ MattFlier的解决方案是正确的,但不能使用最新的Swift编译器进行编译.解包NSURLRequest URL属性非常重要,因此更新的解决方案是:
func webView(webView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool {
if navigationType == UIWebViewNavigationType.LinkClicked {
if (request.URL!.host! == "example.com"){
return true
} else {
UIApplication.sharedApplication().openURL(request.URL!)
return false
}
}
return true
}
Run Code Online (Sandbox Code Playgroud)
是的,为了解决这个问题,您可以将UIWebView控制+拖动到代表视图的UIViewController,然后确保委托函数的名称与"IBOutlet weak var"相同,就像这样

您还需要确保您的视图控制器实现UIWebViewDelegate
class OfferDetailViewController : UIViewController, UIWebViewDelegate
{
...
Run Code Online (Sandbox Code Playgroud)
然后在您的viewDidLoad()方法中,您还需要像这样分配委托:
override func viewDidLoad() {
self.webView.delegate = self;
}
Run Code Online (Sandbox Code Playgroud)
我在Swift上的进步肯定比我想象的要好...
修改最初找到的解决方案(在问题中链接)后,我想到了可以通过我的URL进行操作的替代方法,但可以在Safari中打开所有外部URL。
func webView(webView: UIWebView!, shouldStartLoadWithRequest request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool {
if navigationType == UIWebViewNavigationType.LinkClicked {
if (request.URL.host! == "example.com"){
return true
} else {
UIApplication.sharedApplication().openURL(request.URL)
return false
}
}
return true
}
Run Code Online (Sandbox Code Playgroud)
不要忘记将这段代码从UIWebView委派给View Controller,并且它应该可以正常工作(只要将其替换example.com为URL)即可。
由于我整天都在教程和论坛中进行搜索,因此请对此评论投票,并认为我的最终解决方案是一种非常干净的解决方案!
| 归档时间: |
|
| 查看次数: |
6583 次 |
| 最近记录: |