美文网首页
swift-关键词高亮扩展

swift-关键词高亮扩展

作者: 久百一 | 来源:发表于2020-09-14 02:35 被阅读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
          }
    

    相关文章

      网友评论

          本文标题:swift-关键词高亮扩展

          本文链接:https://www.haomeiwen.com/subject/nzraektx.html