使用Swift编写的一个具有多行/单行选择、颜色/大小/文本和字体定制的弹出选择器视图
要求
TCPickerView 适用于 iOS 9 及更高版本。它依赖于以下 Apple 框架,这些框架通常已经包含在大多数 Xcode 模板中:
- Foundation
- UIKit
安装
CocoaPods
您可以通过将以下内容添加到 Podfile
中,使用 CocoaPods 安装 TCPickerView
:
platform :ios, '9.0'
use_frameworks!
pod 'TCPickerView'
手动
- 将
Classes
和Assets
文件夹拖放到您的项目中。 - 恭喜您!
示例
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)
选择器支持 multiply
、single
和 none
行选择。您可以通过将 TCPickerView
的 selection
属性设置为适当的值来设置所需的行为。
跟踪用户操作
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 许可证 的条款和条件下分发。