iOS 17中如何拦截UITextView的链接点击?UITextItemInteraction已废弃
iOS 17 中 UITextView 拦截链接点击的实现方案
iOS 17 及后续版本中,原带UITextItemInteraction参数的shouldInteractWith代理方法已被废弃,可使用新增的代理方法完成链接点击拦截:
实现代码示例
class YourViewController: UIViewController, UITextViewDelegate { override func viewDidLoad() { super.viewDidLoad() let textView = UITextView(frame: view.bounds) textView.delegate = self textView.isEditable = false textView.text = "测试链接:https://example.com" view.addSubview(textView) } // iOS 17+ 专用的链接交互拦截代理方法 func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, options: [UITextItemInteractionOption : Any]?) -> Bool { print("拦截到链接:\(URL)") // 在这里添加自定义处理逻辑,比如跳转内部页面、展示弹窗等 // 返回false禁止系统默认的链接打开行为(如跳转Safari) return false } }
关键说明
- 确保视图控制器遵循
UITextViewDelegate协议,并给UITextView设置了delegate options参数包含交互附加信息,比如是否是长按触发的预览(UITextItemInteractionOption.preview),无需额外处理时可忽略该参数- 返回
true允许系统执行默认链接打开动作,返回false则完全拦截并交由自定义逻辑处理
内容的提问来源于stack exchange,提问作者neowinston
相关产品推荐
相关产品推荐

