以下是一個使用 Swift 實現(xiàn)的字符串高亮效果,高亮部分可以點擊的示例:
func highlightString(originalString: String, highlightString: String, target: AnyObject?, action: Selector?) -> NSAttributedString {
let attributedString = NSMutableAttributedString(string: originalString)
let range = NSString(string: originalString).range(of: highlightString, options: .caseInsensitive)
attributedString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.red, range: range)
if target != nil && action != nil {
let tapGesture = UITapGestureRecognizer(target: target, action: action)
attributedString.addAttribute(NSAttributedString.Key.link, value: target!, range: range)
attributedString.addAttribute(NSAttributedString.Key.underlineStyle, value: NSUnderlineStyle.single.rawValue, range: range)
attributedString.addAttribute(NSAttributedString.Key.underlineColor, value: UIColor.blue, range: range)
attributedString.addAttribute(NSAttributedString.Key.gestureRecognizers, value: [tapGesture], range: range)
}
return attributedString
}
這個函數(shù)接受四個參數(shù)壹甥,一個是原始字符串救巷,另一個是要高亮的字符串,第三個參數(shù)是目標(biāo)對象句柠,最后一個參數(shù)是要執(zhí)行的方法浦译。它返回一個 NSAttributedString 對象棒假,其中高亮字符串已經(jīng)使用紅色文本顏色進行了標(biāo)記,并且可以被點擊精盅。
要使用這個函數(shù)帽哑,只需要傳入原始字符串、要高亮的字符串叹俏、目標(biāo)對象和要執(zhí)行的方法即可妻枕。例如
@objc func handleTap(_ gesture: UITapGestureRecognizer) {
guard let attributedString = gesture.view as? NSAttributedString else {
return
}
let range = (attributedString.string as NSString).range(of: highlightString, options: .caseInsensitive)
// 執(zhí)行一些操作,例如顯示一個提示框或者跳轉(zhuǎn)到其他頁面
}
在這個示例中粘驰,handleTap 方法首先將被點擊的字符串轉(zhuǎn)換為 NSAttributedString 對象屡谐,然后獲取高亮字符串的范圍,最后執(zhí)行一些操作蝌数,例如顯示一個提示框或者跳轉(zhuǎn)到其他頁面愕掏。