您可以使用UITapGestureRecognizer为包含富文本的UILabelUITextView添加点击事件。在点击事件中,可以使用UITextRange来选中指定的部分文字,并设置下划线。

下面是一个使用UITapGestureRecognizer的示例代码:

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var label: UILabel!
    
    let str = "Hello World! This is a test."
    let keyWord: [String] = ["Hello", "test"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let attributedString = NSMutableAttributedString(string: str)
        
        for keyword in keyWord {
            let range = (str as NSString).range(of: keyword)
            attributedString.addAttribute(.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: range)
            attributedString.addAttribute(.foregroundColor, value: UIColor.blue, range: range)
        }
        
        label.attributedText = attributedString
        
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(labelTapped))
        label.isUserInteractionEnabled = true
        label.addGestureRecognizer(tapGesture)
    }
    
    @objc func labelTapped(sender: UITapGestureRecognizer) {
        let label = sender.view as! UILabel
        let layoutManager = NSLayoutManager()
        let textContainer = NSTextContainer(size: label.bounds.size)
        let textStorage = NSTextStorage(attributedString: label.attributedText!)
        
        layoutManager.addTextContainer(textContainer)
        textStorage.addLayoutManager(layoutManager)
        
        let location = sender.location(in: label)
        let characterIndex = layoutManager.characterIndex(for: location, in: textContainer, fractionOfDistanceBetweenInsertionPoints: nil)
        
        for keyword in keyWord {
            let range = (str as NSString).range(of: keyword)
            
            if NSLocationInRange(characterIndex, range) {
                // 点击到了关键字
                print("Clicked on keyword: \(keyword)")
                
                // 在这里可以执行相应的操作,比如跳转到详情页面等
                break
            }
        }
    }
}

在上述示例代码中,我们首先创建了一个包含富文本的NSMutableAttributedString对象,并为关键字添加了下划线和蓝色字体颜色。然后,将该富文本设置为UILabelattributedText属性。

接下来,创建了一个UITapGestureRecognizer对象,并将其添加到UILabel上。在点击事件中,我们使用NSLayoutManagerNSTextContainerNSTextStorage来获取点击位置所对应的字符索引。然后,遍历关键字数组,判断点击位置是否在关键字的范围内。如果是,则执行相应的操作。

请注意,这只是一个简单的示例,您可以根据自己的需求进行修改和扩展

iOS Swift 富文本部分文字能够点击和拥有下划线可以选中 文字类容属性是selfstr 部分文字放到keyWord String数组里面

原文地址: https://www.cveoy.top/t/topic/hNbT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录