TCPickerView 0.2.8

TCPickerView 0.2.8

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

Taras Chernyshenko 维护。



使用Swift编写的一个具有多行/单行选择、颜色/大小/文本和字体定制的弹出选择器视图

要求

TCPickerView 适用于 iOS 9 及更高版本。它依赖于以下 Apple 框架,这些框架通常已经包含在大多数 Xcode 模板中:

  • Foundation
  • UIKit

安装

CocoaPods

您可以通过将以下内容添加到 Podfile 中,使用 CocoaPods 安装 TCPickerView

platform :ios, '9.0'
use_frameworks!
pod 'TCPickerView'

手动

  1. ClassesAssets 文件夹拖放到您的项目中。
  2. 恭喜您!

示例

import UIKit
import TCPickerView

class ViewController: UIViewController {

    @IBAction private func showButtonPressed(button: UIButton) {
        var picker: TCPickerViewInput = TCPickerView()
        picker.title = "Cars"
        let cars = [
            "Chevrolet Bolt EV",
            "Subaru WRX",
            "Porsche Panamera",
            "BMW 330e",
            "Chevrolet Volt",
            "Ford C-Max Hybrid",
            "Ford Focus"
        ]
        let values = cars.map { TCPickerView.Value(title: $0) }
        picker.values = values
        picker.delegate = self
        picker.selection = .single
        picker.completion = { (selectedIndexes) in
            for i in selectedIndexes {
                print(values[i].title)
            }
        }
        picker.closeAction = {
            print("Handle close action here")
        }
        picker.show()
    }
}

如果您想设置预选值: TCPickerView.Value(标题: "雪佛兰boltEV", isChecked: true)

选择器支持 multiplysinglenone 行选择。您可以通过将 TCPickerViewselection 属性设置为适当的值来设置所需的行为。

跟踪用户操作

TCPickerViewOutput 允许您跟踪选中了哪个项目。在控制器中实现此方法并将 delegate 属性分配给此控制器。

public protocol TCPickerViewOutput: class {
    func pickerView(_ pickerView: TCPickerView, didSelectRowAtIndex index: Int)
}

如果您需要,可以请求新方法。我愿意讨论。

UI 定制

创建一个符合 TCPickerViewThemeType 协议的类,并调整 UI 布局,或者使用现有的主题之一。

  • TCPickerViewDefaultTheme
  • TCPickerViewLightTheme
  • TCPickerViewDarkTheme

您可以将这些作为创建您自己的出色设计的参考。

您可以更改以下属性

var doneText: String { get }
var closeText: String { get }

var backgroundColor: UIColor { get }
var titleColor: UIColor { get }
var doneTextColor: UIColor { get }
var closeTextColor: UIColor { get }
var headerBackgroundColor: UIColor { get }
var doneBackgroundColor: UIColor { get }
var closeBackgroundColor: UIColor { get }
var separatorColor: UIColor { get }

var buttonsFont: UIFont { get }
var titleFont: UIFont { get }

var rowHeight: CGFloat { get }
var headerHeight: CGFloat { get }
var cornerRadius: CGFloat { get }

var searchColor: UIColor { get }

搜索

此库提供了一个易于使用的搜索框。您可以通过使用 isSearchEnabled 属性启用它,然后订阅 searchResult: TCPicker.SearchResult 闭包。

    picker.isSearchEnabled = true
    picker.searchResult = { [unowned self] searchText in
        self.filteredCars = cars.filter { $0.contains(searchText) }
        let values = filteredCars.map { TCPickerView.Value(title: $0) }
        picker.values = values
    }

请随意参考 DarkViewController 的用法示例。或者,您可以在控制器中实现 UISearchBarDelegate 委托方法并将 searchBar.delegate 分配给它,例如:picker.searchBar.delegate = self

使用您自己的 cell

  • 在 .xib 或代码中设计您的 cell
  • 使您的单元格符合 TCPickerCellType 协议
  • 使用以下方法之一在选择器中注册单元格:
    func register(_ nib: UINib?, forCellReuseIdentifier identifier: String)
    func register(_ cellClass: Swift.AnyClass?, forCellReuseIdentifier identifier: String)
  • 在您的视图控制器中实现 TCPickerViewOutput 协议
  • func pickerView(_ pickerView: TCPickerViewInput, cellForRowAt indexPath: IndexPath) -> (UITableViewCell & TCPickerCellType)? 方法中调用 func dequeueReusableCell(withIdentifier identifier: String, for indexPath: IndexPath) -> UITableViewCell & TCPickerCellType 来在 dequeue 您的单元格
  • 如需更多信息,请查看示例项目中的 LightViewController 文件。

贡献给此项目

如果您有功能请求或错误报告,请随时通过发送拉取请求或创建问题来帮助我们。

许可协议

此代码在 MIT 许可证 的条款和条件下分发。