iOS Swift 富文本部分文字能够点击和拥有下划线可以选中 文字类容属性是selfstr 部分文字放到keyWord String数组里面
您可以使用UITapGestureRecognizer为包含富文本的UILabel或UITextView添加点击事件。在点击事件中,可以使用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对象,并为关键字添加了下划线和蓝色字体颜色。然后,将该富文本设置为UILabel的attributedText属性。
接下来,创建了一个UITapGestureRecognizer对象,并将其添加到UILabel上。在点击事件中,我们使用NSLayoutManager、NSTextContainer和NSTextStorage来获取点击位置所对应的字符索引。然后,遍历关键字数组,判断点击位置是否在关键字的范围内。如果是,则执行相应的操作。
请注意,这只是一个简单的示例,您可以根据自己的需求进行修改和扩展
原文地址: https://www.cveoy.top/t/topic/hNbT 著作权归作者所有。请勿转载和采集!