swift-关键词高亮扩展

2020-09-14  本文已影响0人  久百一

单个关键词

/// 指定关键词高亮
    /// - Parameter keyString: 关键词
    /// - Parameter keyColor: 高亮颜色
    /// - Parameter isLineThrough: 是否下划线
    func m_setKeyColor(keyString:String,keyColor:UIColor,isLineThrough:Bool = false) -> NSAttributedString{
        let strFullText:String = self
        var range:NSRange?
        var dicAttr:[NSAttributedString.Key:Any]?
        let attributeString = NSMutableAttributedString.init(string: strFullText)
        //不需要改变的文本
        range = NSString.init(string: strFullText).range(of: String.init(strFullText))
        //需要改变的文本
        let ranges = self.rangeOfString(string: NSString.init(string: strFullText), andInString: keyString)
        for range in ranges {
        dicAttr = [
            NSAttributedString.Key.foregroundColor:keyColor
        ]
        if isLineThrough {
            dicAttr?[NSAttributedString.Key.strikethroughStyle] = NSNumber.init(value: 1)
        }
         
        if range.location + range.length <= strFullText.count {
            attributeString.addAttributes(dicAttr!, range: range)
        }
      }
     return attributeString
    }

多个关键词 - 单色

/// 指定关键词高亮
    /// - Parameter keyString: 关键词
    /// - Parameter keyColor: 高亮颜色
    /// - Parameter isLineThrough: 是否下划线
    func m_setKeyColorAll(keyString:[String],keyColor:UIColor,isLineThrough:Bool = false) -> NSAttributedString{
        let strFullText:String = self
        var range:NSRange?
        var dicAttr:[NSAttributedString.Key:Any]?
        let attributeString = NSMutableAttributedString.init(string: strFullText)
        //不需要改变的文本
        range = NSString.init(string: strFullText).range(of: String.init(strFullText))
                   //需要改变的文本
               var index:Int = 0
               for item in keyString {
                   //range = NSString.init(string: strFullText).range(of: item)
                   let ranges = self.rangeOfString(string: NSString.init(string: strFullText), andInString: item)
        
                   for range in ranges {
                       dicAttr = [
                           NSAttributedString.Key.foregroundColor:keyColor
                       ]
                       
                       if isLineThrough {
                           dicAttr?[NSAttributedString.Key.strikethroughStyle] = NSNumber.init(value: 1)
                       }
        
                       if range.location + range.length <= strFullText.count {
                           attributeString.addAttributes(dicAttr!, range: range)
                       }
                   }
                   
                   index += 1
               }
          return attributeString
      }

指定关键词高亮 - 多色

/// 指定关键词高亮 - 多色
    /// - Parameter keyString: 关键词[]
    /// - Parameter keyColor: 高亮颜色
    /// - Parameter isLineThrough: 是否下划线
    func m_setKeyColorAll(keyString:[String],keyColor:[UIColor],isLineThrough:Bool = false) -> NSAttributedString{
        let strFullText:String = self
        var range:NSRange?
        var dicAttr:[NSAttributedString.Key:Any]?
        let attributeString = NSMutableAttributedString.init(string: strFullText)
        //不需要改变的文本
        range = NSString.init(string: strFullText).range(of: String.init(strFullText))
                   //需要改变的文本
               var index:Int = 0
               for item in keyString {
                   //range = NSString.init(string: strFullText).range(of: item)
                   let ranges = self.rangeOfString(string: NSString.init(string: strFullText), andInString: item)
        
                   for range in ranges {
                       dicAttr = [
                        NSAttributedString.Key.foregroundColor:keyColor.count > index ? keyColor[index] : keyColor.first as Any,
                       ]
                       
                       if isLineThrough {
                           dicAttr?[NSAttributedString.Key.strikethroughStyle] = NSNumber.init(value: 1)
                       }
        
                       if range.location + range.length <= strFullText.count {
                           attributeString.addAttributes(dicAttr!, range: range)
                       }
                   }
                   
                   index += 1
               }
          return attributeString
      }
上一篇下一篇

猜你喜欢

热点阅读