| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- //
- // NSAttributedString+Extension.swift
- // QuickSearchLocation
- //
- // Created by Destiny on 2024/11/27.
- //
- import UIKit
- extension NSAttributedString {
-
- func setRangeFontText(font: UIFont, range: NSRange) -> NSAttributedString {
- return setSpecificRangeTextMoreAttributes(attributes: [NSAttributedString.Key.font : font], range: range)
- }
-
- func setSpecificTextColor(_ text: String, color: UIColor) -> NSAttributedString {
- return setSpecificTextMoreAttributes(text, attributes: [NSAttributedString.Key.foregroundColor : color])
- }
-
- func setSpecificRangeTextMoreAttributes(attributes: Dictionary<NSAttributedString.Key, Any>, range: NSRange) -> NSAttributedString {
- let mutableAttributedString = NSMutableAttributedString(attributedString: self)
- for name in attributes.keys {
- mutableAttributedString.addAttribute(name, value: attributes[name] ?? "", range: range)
- }
- return mutableAttributedString
- }
-
- func setSpecificTextColorFont(_ text: String, color: UIColor, font: UIFont) -> NSAttributedString {
- return setSpecificTextMoreAttributes(text, attributes: [NSAttributedString.Key.foregroundColor : color, NSAttributedString.Key.font : font])
- }
-
- func setSpecificTextMoreAttributes(_ text: String, attributes: Dictionary<NSAttributedString.Key, Any>) -> NSAttributedString {
- let mutableAttributedString = NSMutableAttributedString(attributedString: self)
- let rangeArray = getStringRangeArray(with: [text])
- if !rangeArray.isEmpty {
- for name in attributes.keys {
- for range in rangeArray {
- mutableAttributedString.addAttribute(name, value: attributes[name] ?? "", range: range)
- }
- }
- }
- return mutableAttributedString
- }
-
- private func getStringRangeArray(with textArray: Array<String>) -> Array<NSRange> {
- var rangeArray = Array<NSRange>()
- // 遍历
- for str in textArray {
- if self.string.contains(str) {
- let subStrArr = self.string.components(separatedBy: str)
- var subStrIndex = 0
- for i in 0 ..< (subStrArr.count - 1) {
- let subDivisionStr = subStrArr[i]
- if i == 0 {
- subStrIndex += (subDivisionStr.lengthOfBytes(using: .unicode) / 2)
- } else {
- subStrIndex += (subDivisionStr.lengthOfBytes(using: .unicode) / 2 + str.lengthOfBytes(using: .unicode) / 2)
- }
- let newRange = NSRange(location: subStrIndex, length: str.count)
- rangeArray.append(newRange)
- }
- }
- }
- return rangeArray
- }
- }
|