如何检测 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
}
使用 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
}