如何拦截 UITextView 中 link 上的 phone 数字点击(呼叫按钮)?

How to intercept a phone number click (Call button) on link in UITextView?

当我们在文本视图中点击一个数字时出现的弹出窗口中,是否有一个回调来识别用户何时点击调用

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

上面提到的函数将帮助我识别 link 已在 UITextView 中被点击,而是否有特定的回调来识别 Call 是否被点击或点击取消

使用委托方法:

func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {
        print("Phone \(URL)")
        return false
}

不要忘记连接 textView 委托。

self.textView.delegate = self

然后你可以添加一个自定义的UIAlertController来调用或取消。

编辑:

这是完整代码:

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

    if (URL.scheme == "tel"){
        let phoneNumber = URL.absoluteString.stringByReplacingOccurrencesOfString("tel:", withString: "")
        let alert = UIAlertController(title: phoneNumber, message: nil, preferredStyle: .Alert)
        alert.addAction(UIAlertAction(title: "Call", style: .Default, handler: { (alert) in
            if UIApplication.sharedApplication().canOpenURL(URL) {
                UIApplication.sharedApplication().openURL(URL)
            }
        }))
        alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: { (alert) in
            print("User Canceld")
        }))
        presentViewController(alert, animated: true, completion: nil)
        return false
    }

    return true
}

最后一件事,在您的 info.plist 中添加:

<key>LSApplicationQueriesSchemes</key>
<array>
<string>tel</string>
</array>