diff --git a/Highlighter/Highlightable.swift b/Highlighter/Highlightable.swift index 1ba38c2..4a3f0e9 100644 --- a/Highlighter/Highlightable.swift +++ b/Highlighter/Highlightable.swift @@ -13,6 +13,7 @@ public protocol Highlightable: class { var attributedTextValue: NSAttributedString? { get set } func highlight(text: String, normal normalAttributes: [NSAttributedString.Key : Any]?, highlight highlightAttributes: [NSAttributedString.Key : Any]?) + func unHighlight() } extension Highlightable { @@ -31,4 +32,10 @@ extension Highlightable { highlight: highlightAttributes ) } + + public func unHighlight() { + if let attText = self.attributedTextValue { + attributedTextValue = NSAttributedString(string: attText.string) + } + } } diff --git a/Highlighter/HighlightableContainer.swift b/Highlighter/HighlightableContainer.swift index 6e798c7..19c70c3 100644 --- a/Highlighter/HighlightableContainer.swift +++ b/Highlighter/HighlightableContainer.swift @@ -17,6 +17,7 @@ public protocol HighlightableContainer: class { /// - highlightAttributes: Attributes to apply (highlight) to matching text /// - type: (optional) Only search `Highlightable`s of this type func highlight(text: String, normal normalAttributes: [NSAttributedString.Key : Any]?, highlight highlightAttributes: [NSAttributedString.Key : Any]?, type: Highlightable.Type?) + func unHighlight(type: Highlightable.Type?) } extension HighlightableContainer { @@ -27,6 +28,14 @@ extension HighlightableContainer { .filter { return type == nil || Swift.type(of: $0) == type } .forEach { $0.highlight(text: text, normal: normalAttributes, highlight: highlightAttributes) } } + + public func unHighlight(type: Highlightable.Type? = nil) { + let mirror = Mirror(reflecting: self) + mirror.children + .compactMap { $0.value as? Highlightable } + .filter { return type == nil || Swift.type(of: $0) == type } + .forEach { $0.unHighlight() } + } } extension UIView: HighlightableContainer { }