在 App 内的 UITextView 中打开 link

Open link in UITextView within App

我正在尝试打开我的 UITextView 在应用程序中识别的 link。我正在使用 UITextView delegate 方法 shouldInteractWithURL 来实现这一点。

我的代码似乎适用于 url 的应用内加载;但是,除了在应用程序内,它还在 Safari 中打开 link。有什么办法可以解决这个问题吗?

func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {

    println("called")
    let webViewController = WebViewController()        
    webViewController.urlToLoad = URL

    if let navigationController = navigationController {
        println("navigating")
        navigationController.pushViewController(webViewController, animated: true)
        return true
    }
    else {
        return false
    }
}

请注意,WebViewController 只是我自定义的 class,它在整个屏幕上显示 UIWebView。它有一个 属性 urlToLoad ,这是它将加载到 UIWebView.

中的 url

我还将 UITextViewdelegate 分配给已经实现此委托功能的 UIViewController

有谁知道如何让应用停止打开 safari 吗?

仅当 link 必须在 Safari 中打开时,shouldInteractWithURL 函数才应 return true。如果你自己处理 link 你应该 return false。检查下面代码中更改的行。

您也可以使用可选链接代替 if 条件来调用 pushViewController

func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {

    let webViewController = WebViewController()        
    webViewController.urlToLoad = URL

    navigationController?.pushViewController(webViewController, animated: true)

    return false // Changed line.
}