Skip to content

增加文本检查特性, 控件增加监听不同类型的点击事件支持, 优化API

Choose a tag to compare

@lixiang1994 lixiang1994 released this 04 Jul 06:58
· 114 commits to master since this release
f89b3ed

New Version ヾ(@^▽^@)ノ 💥

特性:

增加文本检查特性, 可过滤匹配指定类型的内容, 例如: Action类型, 正则表达式类型, NSDataDetector自带的类型等.

  • UILabel & UITextView & NSTextField 原支持Action的控件 增加了监听方法, 可监听某一个或多个类型的点击事件.

  • 为某一个或多个类型 添加新的属性 或 为某一个或多个类型 覆盖原有属性.

应用:

  • 例如为整段文本的电话号码类型增加点击事件获取 跳转拨号.

  • 例如在View的tintAdjustmentMode.dimmed时, 设置Action类型的颜色转为灰色.

  • 例如为整段文本添加一个正则表达式类型 为符合表达式的内容增加高亮的颜色.

更多细节可参考README 和 Demo, 如果你有更好的想法 可以Issues留言.


API

Changed:

AttributedString:

old:

init(_: String)

new:

init(string: String)

AttributedString.Attribute:

old:

func color(_: Color)

new:

func foreground(_: Color)

Add:

Class:

AttributedString.Checking:

extension AttributedString {
        
    public enum Checking: Hashable {
        /// 自定义范围
        case range(NSRange)
        /// 正则表达式
        case regex(String)
        #if os(iOS) || os(macOS)
        case action
        #endif
        ///
        case date
        case link
        case address
        case phoneNumber
        case transitInformation
    }
}

AttributedString.Checking.Result:

extension AttributedString.Checking {
    
    public enum Result {
        /// 自定义范围
        case range(NSAttributedString)
        /// 正则表达式
        case regex(NSAttributedString)
        #if os(iOS) || os(macOS)
        case action(AttributedString.Action.Result)
        #endif
        
        case date(Date)
        case link(URL)
        case address(Address)
        case phoneNumber(String)
        case transitInformation(TransitInformation)
    }
}

Founction:

AttributedString:

init(string: String, _: Attribute...)

init(string: String, with: [Attribute])
func isContentEqual(_: AttributedString?)
mutating func add(attributes: [Attribute], range: NSRange)

mutating func set(attributes: [Attribute], range: NSRange)
mutating func add(attributes: [Attribute], checkings: [Checking])

mutating func set(attributes: [Attribute], checkings: [Checking])

UILabel & UITextView & NSTextField:

func observe(_ checking: Checking, highlights: [Highlight], with: @escaping (Checking.Result) -> Void)

func observe(_ checkings: [Checking], highlights: [Highlight], with: @escaping (Checking.Result) -> Void)
func remove(checking: Checking)

func remove(checkings: [Checking])

Remove:

AttributedString:

init<T>(_ value: T)