我有一个非常简单的UIWebView,其中包含我的应用程序包中的内容.我希望Web视图中的任何链接都在Safari中打开,而不是在Web视图中打开.这个是可能的吗?

推荐答案

将以下内容添加到UIWebView委托:

(编辑以判断导航类型.您还可以传递file://个请求,这些请求将是相对链接)

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if (navigationType == UIWebViewNavigationTypeLinkClicked ) {
        [[UIApplication sharedApplication] openURL:[request URL]];
        return NO;
    }

    return YES;
}

SWIFT版本:

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        if navigationType == UIWebViewNavigationType.LinkClicked {
            UIApplication.sharedApplication().openURL(request.URL!)
            return false
        }
        return true
    }

SWIFT 3版本:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    if navigationType == UIWebViewNavigationType.linkClicked {
        UIApplication.shared.openURL(request.url!)
        return false
    }
    return true
}

SWIFT 4版本:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebView.NavigationType) -> Bool {
    guard let url = request.url, navigationType == .linkClicked else { return true }
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
    return false
}

Update

由于openURL在iOS 10中已被弃用,因此:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        if (navigationType == UIWebViewNavigationTypeLinkClicked ) {
            UIApplication *application = [UIApplication sharedApplication];
            [application openURL:[request URL] options:@{} completionHandler:nil];
            return NO;
        }

        return YES;
}

Ios相关问答推荐

什么是最好的方式使用DateFormatters在可扩展视图cellForRowAt方法

SWIFT中具有可选返回类型和泛型的网络请求

创建带有Flutter 翼的会所头像

阿拉伯文变音符号(Harakat)在文本对齐的UILabel中未对齐

带有RadStudio 11.3/12的Mac Mini M2(Sonoma 14.2.1)上的PAServer-测试连接按钮有效,但部署不起作用

如何创建具有SPM依赖项的二进制XCFramework?

SwiftUI 每秒从 Timer 更新单个 @State 属性,每秒也重绘整个视图

DllImport with .a file for iOS in MAUI

添加到单个自定义视图时,Swiftui 项目会在所有视图中重复

将角半径仅应用于 Swiftui 中按钮的两个角

有哪些可靠的机制可以防止 CoreData CloudKit 中的数据重复?

如何避免任何绑定空错误并更好地获取代码

Xcode - 错误 ITMS-90635 - Bundle 包中的 Mach-O 无效 - 提交到 App Store

未找到签名证书​​iOS Distribution

UICollectionView - 动态单元格高度?

Select 器touchesBegan:withEvent:的覆盖方法具有不兼容的类型(NSSet,UIEvent)->()

UICollectionView flowLayout 没有正确包装单元格

如何删除 Swift 数组中的所有 nil 元素?

iPhone:什么是 WWDR 中级证书?

什么是强属性属性