TokenRow 1.6.0

TokenRow 1.6.0

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最后发布2022年10月
SPM支持SPM

Mathias ClaassenMauricio CousillasDiego Ernst维护。



 
依赖
Eureka~> 5.4
CLTokenInputView~> 2.3
 

TokenRow 1.6.0

TokenRow

Platform iOS Swift 4 compatible CocoaPods compatible License: MIT

Xmartlabs SRL 提供。

内容

简介

TokenRow是Eureka的行扩展。它包含一个CLTokenInputView,允许用户选择、添加和删除标记。

TokenRow包含两个具有类似功能但显示方式不同的行

  • TokenAccessoryRow:显示为单元格的`inputAccessoryView`的集合视图。用户可以水平滚动来选择所需的标记
  • TokenTableRow:直接在单元格下方显示一个`UITableView`,供用户选择所需的选项。

使用方法

form +++ Section()
     <<< TokenAccessoryRow<String>() {
         $0.placeholder = "Choose from collection view"
         $0.options = ["Peter Schmeichel", "David de Gea", "Oliver Kahn", "Fabien Barthez", "Tim Howard", "Gianluigi Buffon"]
     }
     +++ Section()
     <<< TokenTableRow<String>() {
         $0.placeholder = "Choose from table"
         $0.options = ["Peter Schmeichel", "David de Gea", "Oliver Kahn", "Fabien Barthez", "Tim Howard", "Gianluigi Buffon"]
     }

要了解您可以定制的内容,请查看定制化部分。

依赖项

要求

  • iOS 9.3+
  • Xcode 10.2+

参与贡献

  • 如果您想贡献,请随时提交拉取请求。
  • 如果您有功能请求,请打开issue
  • 如果您发现错误或需要帮助,在提交issue之前请查阅旧issue

在贡献力量之前,请查阅CONTRIBUTING文件以获取更多信息。

如果您在应用中使用了TokenRow,我们很乐意听到您的反馈!在twitter上联系我们。

示例

按照以下步骤运行示例项目

  • 克隆TokenRow仓库
  • TokenRow/Example文件夹中运行pod install
  • 在相同文件夹中打开示例工作区

安装

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理器。

要安装 TokenRow,只需将以下行添加到您的 Podfile 中

pod 'TokenRow'

TokenSearchable

令牌行的值(即 TokenAccessoryRow 或 TokenTableRow)必须符合 TokenSearchable 协议。这样,您可以使用类或结构体作为此行的值,而不仅仅是字符串。TokenSearchable 协议的定义如下

public protocol TokenSearchable: Hashable {
    var displayString: String { get }
    func contains(token: String) -> Bool
    var identifier: NSObject { get }
}

以下是每个参数的简要说明

  • displayString:将用于获取要显示为令牌的字符串
  • contains(token: String) -> Bool 用于筛选给定搜索字符串的选项。
  • identifier 是令牌的标识符,且应在所有选项中是唯一的

注意,该值还必须符合 Hashable 协议,该协议反过来又需要 Equatable

TokenRow 包含一个对 String 的扩展,使其符合 TokenSearchable 协议,这样您就可以使用任何具有字符串值的行。要使类符合此协议,可以进行如下操作

final class User {
    var id: Int = 0
    var name: String = ""
    var avatar: String?

	// conform to Hashable
    var hashValue: Int {
        return id
    }
}

// conform to Equatable
func == (lhs: User, rhs: User) -> Bool {
    return lhs.id == rhs.id
}

extension User: TokenSearchable {
    func contains(token: String) -> Bool {
        return name.contains(token)
    }

    var identifier: NSObject {
        return id
    }

    var displayString: String {
        return name
    }
}

自定义

此行中许多与 SuggestionRowGooglePlacesRow 非常类似。您可以在这些项目中找到一些有用的示例。

通用自定义

您可以更改 TokenRow 的几个部分。首先,如果您想更改包含令牌的视图,应查看 CLTokenInputView

对于每一行,你必须做的操作是为用户提供选择标记的选项。传统的做法是将选项数组指定为行的(code>options变量

<< TokenAccessoryRow<String>() {
         $0.options = ["Peter Schmeichel", "David de Gea", "Oliver Kahn", "Fabien Barthez", "Tim Howard", "Gianluigi Buffon"]
     }

但是,你还可以通过重写getTokensForString来提供选项。例如,你可以通过网络调用异步获取标记,并在响应到来后重新加载选项。例如

row.getTokensForString = { [weak self, row] string in
        guard let me = self else { return nil }
        Alamofire.SessionManager.default.request("https://api.github.com/search/users?q=\(text)&per_page=5")
                .responseCollection(completionHandler: { (response: DataResponse<[User]>) in
                    switch response.result {
                    case let .success(value):
                        row.cell.filteredTokens = value
                        row.cell.reloadOptions()
                    case let .failure(error):
                        print(error)
                    }
                })
        return []
    }

就这么简单(至少如果你熟悉Alamofire)。你可以在示例项目中看到这个功能的实际应用。

TokenAccessoryRow

TokenAccessoryRow使用一个通用的TokenCollectionCell单元格,其泛型参数是用于输入辅助视图的UICollectionViewCell类。

  • 如果你只想更改收集视图单元格的一些小事情(你很可能会这么做),那么customizeCollectionViewCell回调就是给你的。这个块在代理的collectionView:cellForItemAtIndexPath:方法中被调用。

  • 如果你想更改收集视图的布局,那么你可以在声明行时使用/修改/重写cellSetup方法中的collectionViewLayout属性。看看这个例子。

  • 如果你想更改收集视图(例如,其高度、backgroundColor)的内容,你也可以在cellSetup方法中这样做。只需编辑你的单元格的collectionView变量中的任何东西。

  • 如果你想极大地改变输入辅助视图的收集视图单元格,那么创建自己的行(CustomAccessoryRow)并添加自己的MyCollectionViewCell是最简单的方法。

final class CustomAccessoryRow<T: TokenSearchable>: _TokenRow<T, CollectionTokenCell<T, MyCollectionViewCell<T>>>, RowType {
    required init(tag: String?) {
        super.init(tag: tag)
    }
}

注意:你的自定义MyCollectionViewCell必须遵守EurekaTokenCollectionViewCell

TokenTableRow

TokenTableRow使用一个通用的TokenTableCell单元格,其泛型参数是用于创建显示在带有建议选项的UITableView中的单元格的UITableViewCell类。

  • 如果你只想更改显示选项的单元格的一些小事情,则可以在单元格上使用customizeTableViewCell回调。你应该在cellSetup方法中定义它。此回调将在相应的tableView:cellForRowAtIndexPath:方法中被调用。

  • 你可以自定义显示选项的tableView的属性。你应该在cellSetup中这样做,并记住每次显示TableView时都会重置TableView的frame。

  • 如果你想更改选项TableView的单元格,那么创建自己的行(MyTokenTableRow)并使用自己的MyTableViewCell是最简单的方法。

final class MyTokenTableRow<T: TokenSearchable>: _TokenRow<T, TableTokenCell<T, MyTableViewCell<T>>>, RowType {
    required public init(tag: String?) {
        super.init(tag: tag)
    }
}

你还可以将TableTokenCell改为任何你想要的类,以表示TokenRow单元格。

注意:确保你的单元格遵守EurekaTokenTableViewCell

作者

变更日志

可以在 CHANGELOG.md 文件中找到。