ACBTokenField

Swift 3.2 CocoaPods Compatible Carthage Compatible Swift Package Manager Platform License

一个对 NSTokenField 的 Swift 扩展,使其高度可定制,并消除了其实现中的大量样板代码。

特性

演示






设置

可以使用 Carthage、Cocoapods 或 Swift Package Manager 将其集成到项目中。

Carthage

github "akhilcb/ACBTokenField" ~> 2.3.0

Cocoapods

pod 'ACBTokenField', '~> 2.3.0'

Swift Package Manager

dependencies: [
    .Package(url: "https://github.com/akhilcb/ACBTokenField.git", majorVersion: 2)
]

快速开始

为了在项目中实现这一点,只需复制文件 NSTokenField+ACBExtension.swiftACBAssociation.swiftACBToken.swift,并在任何 NSTokenField 上调用以下函数。如上所述,无需子类化或更改 XIB 或 Storyboard 文件。

tokenField.convertToACBTokenField()

如果您希望在 tokenfield 中有清除按钮和/或搜索图标,您可以从 Assets.xcassets 复制图标 ClearDarkGrayGlass。 否则,您可以使用自己的图像并设置 NSTokenField 的属性 clearIconNamesearchIconName。 就可以开始了。

注意:单元格类将动态更改为 ACBTokenFieldCell,并且将设置 delegate。 请不要修改这些属性。 请使用 tokenDelegate 代替 delegate

设置

还有其他功能可以利用,例如设置令牌名称列表数组,该数组表示令牌字段每个索引处的令牌列表。 在这种情况下,您不必实现 NSTokenField 委托。 这将负责显示建议/显示令牌上的菜单/编辑令牌等。

tokenField.tokenKeywordsList = [["France", "Germany", "Italy", "USA", "Spain", "India", "Brazil"],
                                ["Pizza", "Pasta", "Butter Chicken", "Jamon", "Cheesecake"],
                                ["Deer", "Dog", "Bear", "Panda", "Jaguar", "Bull"],
                                ["Car", "Truck", "Bus", "Motorcycle", "Minivan"]]

如上所示设置一个数组,它将根据上面的列表显示建议/菜单。 上面的列表在索引 0 处显示国家名称,在索引 1 处显示食物名称,在索引 2 处显示动物名称等。 如果您不想像这样为每个索引单独定义令牌建议,则可以利用以下属性,为除上面存在的那些索引之外的所有其他索引提供默认建议。

tokenField.defaultTokenKeywords = ["Red", "Blue", "Green", "White", "Purple", "Black"]

这将为 tokenKeywordsList 中未指定索引的 tokenField 中的所有其他令牌显示默认建议和令牌菜单。

您还可以将令牌字段的 leftView 属性设置为任何 NSViewNSView 的子类。 例如:- 您可以将一个 NSButton 添加为 leftView,并对其设置一个操作(请参阅 gif5)。

设置属性

//set any required properties
tokenField.shouldEnableTokenMenu = true
tokenField.tokenDelegate = self
tokenField.leftView = lockButton

tokenField.didDeleteTokenBlock = { (tokenIndex, _) in
    print("Token at index = ", tokenIndex, "is removed")
}

实现委托

public func tokenField(_ tokenField: NSTokenField, completionsForSubstring substring: String, indexOfToken tokenIndex: Int, indexOfSelectedItem selectedIndex: UnsafeMutablePointer<Int>?) -> [Any]? {
    switch tokenIndex {
        case 0:
            return actors
        case 1:
            return actresses
        case 2:
            return movies
        case 3:
            return years
        default:
            return nil
    }
}

截图

许可

MIT 许可证

版权所有 (c) 2017, Akhil C Balan(https://github.com/akhilcb)

保留所有权利。