You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 5中如何实现点击UITextView富文本超链接push视图控制器

实现方案

步骤1:配置自定义scheme的富文本链接

给GoToHomeScreen文本添加自定义协议前缀的链接,和普通网页链接做区分,避免系统默认触发网页跳转逻辑。示例代码如下:

let attributesString = NSMutableAttributedString(string: "GoToHomeScreen for know more about app and for info aboutUs ")
// 动态计算GoToHomeScreen的文本范围,避免手动计算range出错
let homeLinkRange = (attributesString.string as NSString).range(of: "GoToHomeScreen")
// 添加自定义scheme的链接,前缀可以自定义为你APP专属的标识
attributesString.addAttribute(.link, value: "myapp://goToHomeScreen", range: homeLinkRange)
// 原有aboutUs的网页链接配置保持不变
attributesString.addAttribute(.link, value: "https://apple.com/aboutUs", range: NSRange(location: 50, length: 7))
// 注意你原代码的textFields为笔误,需替换为你实际的UITextView实例
textView.isEditable = false
textView.isSelectable = true // 必须开启,否则链接点击事件不会响应
textView.delegate = self
textView.attributedText = attributesString

步骤2:实现UITextView代理方法处理链接点击

实现UITextViewDelegate的链接交互代理方法,根据链接类型区分处理逻辑:自定义scheme的链接执行push控制器操作,普通网页链接保留原有打开逻辑。示例代码如下:

// 给当前控制器遵守UITextViewDelegate协议
extension YourViewController: UITextViewDelegate {
    func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
        // 判断是否是跳转首页的自定义链接
        if URL.scheme == "myapp", URL.host == "goToHomeScreen" {
            // 替换为你自己的首页控制器实例,执行push操作
            let homeViewController = HomeViewController()
            navigationController?.pushViewController(homeViewController, animated: true)
            // 返回false阻止系统默认的链接跳转行为
            return false
        }
        // 其他链接(比如aboutUs的网页链接)走原有逻辑,返回true即可
        return true
    }
}

注意:如果需要兼容iOS10以下版本,可以使用旧版的代理方法textView(_:shouldInteractWith:in:),逻辑和上述实现一致。

内容的提问来源于stack exchange,提问作者Sanjay Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:45:03