如何检测 URL 是否已 pasted/typed 进入 UITextView? Swift iOS

How to detect if a URL has been pasted/typed into a UITextView? Swift iOS

使用 Swift,我如何检测用户 typing/pasting 和 URL 进入 UITextView?

如果您不关心文本是否被粘贴或键入,您可以使用此解决方案:

func textViewDidChange(textView: UITextView) {

    if (urlExists(textView.text))
    {
        // URL exists...
    }
}

func urlExists(_ input: String) -> Bool {
    let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
    let matches = detector.matches(in: input, options: [], range: NSRange(location: 0, length: input.utf16.count))

    for match in matches {
        guard let range = Range(match.range, in: input) else { continue }
        let url = input[range]
        print(url)
        return true
    }
    return false
}

如果您需要知道它已粘贴,请使用它。 要是有人贴就不止一个字了。我们应该避免使用 UIPasteboard,因为它可能会在这种情况下冻结,并且还会向用户显示不必要的消息。

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if text.count > 1 {
       // paste scenario
        if (urlExists(text.text))
        {
            // URL exists...
        }
    } else {
       //normal typing
    }
    return true
}