Fastis 是一个全可定制的 UI 组件,用于选择日期和范围,它是由 JTAppleCalendar 库创建的。
要求
- iOS 13.0+
- Xcode 11.0+
- Swift 5.0+
特性
- 灵活的定制
- 日期和范围的快捷键
- 单个日期和日期范围模式
Android 实现
安装
CocoaPods
CocoaPods 是一个用于 Cocoa 项目的依赖管理器。您可以使用以下命令安装它
$ gem install cocoapods
要使用 CocoaPods 将 Fastis 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '13.0'
use_frameworks!
target '<Your Target Name>' do
pod 'Fastis', '~> 2.0'
end
然后,运行以下命令
$ pod install
Swift 包管理器
Swift 包管理器 是一个用于自动化 Swift 代码分发的工具,并集成到 swift
编译器中。
一旦您设置完毕 Swift 包,将 Fastis 添加为依赖项就像将其添加到 Package.swift
的 dependencies
值一样简单。
dependencies: [
.package(url: "https://github.com/simla-tech/Fastis.git", .upToNextMajor(from: "2.0.0"))
]
Carthage
Carthage 不受支持。
手动
如果您不想使用上面提到的任何一个依赖项管理器,您可以手动将Fastis集成到您的项目中。
用法
快速开始
import Fastis
class MyViewController: UIViewController {
func chooseDate() {
let fastisController = FastisController(mode: .range)
fastisController.title = "Choose range"
fastisController.maximumDate = Date()
fastisController.allowToChooseNilDate = true
fastisController.shortcuts = [.today, .lastWeek]
fastisController.doneHandler = { resultRange in
...
}
fastisController.present(above: self)
}
}
单选和范围模式
如果您想获取单个日期,则必须使用 Date
类型
let fastisController = FastisController(mode: .single)
fastisController.initialValue = Date()
fastisController.doneHandler = { resultDate in
print(resultDate) // resultDate is Date
}
如果您想获取日期范围,则必须使用 FastisRange
类型
let fastisController = FastisController(mode: .range)
fastisController.initialValue = FastisRange(from: Date(), to: Date()) // or .from(Date(), to: Date())
fastisController.doneHandler = { resultRange in
print(resultRange) // resultDate is FastisRange
}
配置
FastisController具有以下默认配置参数
var shortcuts: [FastisShortcut<Value>] = []
var allowsToChooseNilDate: Bool = false
var dismissHandler: (() -> Void)? = nil
var doneHandler: ((Value?) -> Void)? = nil
var initialValue: Value? = nil
var minimumDate: Date? = nil
var maximumDate: Date? = nil
var selectMonthOnHeaderTap: Bool = true
var allowDateRangeChanges: Bool = true
shortcuts
- 快捷键数组。默认值为[]
。请参阅 快捷键 部分allowsToChooseNilDate
- 允许选择nil
日期。如果设置为true
,则完成按钮始终启用。默认值为false
.dismissHandler
- 在取消显示后执行的代码块。默认值为nil
。doneHandler
- 点击“完成”按钮后执行的代码块。默认值为nil
。initialValue
- 默认选定的初始值。默认值为nil
。minimumDate
- 最小选择日期。小于当前日期的日期将标记为不可用。默认值为nil
。maximumDate
- 最大选择日期。大于当前日期的日期将标记为不可用。默认值为nil
。selectMonthOnHeaderTap
(仅适用于.range
模式)- 如果想通过点击月份选择日期范围,将此变量设置为true
。默认值为true
。allowDateRangeChanges
(仅适用于.range
模式)- 如果想禁用日期范围更改,将此变量设置为false
。选择范围后的下一次点击将开始新的范围选择。默认值为true
。
快捷键
使用快捷键可以快速选择预设日期或日期范围。默认情况下,.shortcuts
为空。如果没有提供任何快捷键,则底部容器将隐藏。
Fastis为每种模式提供了一些预设的快捷键。
- 对于
.single
:.today
、.tomorrow
、.yesterday
- 对于
.range
:.today
、.lastWeek
、.lastMonth
此外,您还可以创建自己的快捷键。
var customShortcut = FastisShortcut(name: "Today") {
let now = Date()
return FastisRange(from: now.startOfDay(), to: now.endOfDay())
}
fastisController.shortcuts = [customShortcut, .lastWeek]
自定义
Fastis可以全局或局部自定义。 FastisConfig
包含一些部分:
calendar
- 用于渲染UI的基本日历。默认值是.current
controller
- 基础视图控制器(cancelButtonTitle
、doneButtonTitle
等)monthHeader
- 月份标题dayCell
- 天部分(选择参数、字体等)weekView
- 带有星期名称的顶部标题视图currentValueView
- 当前值视图外观(清除按钮、日期格式等)shortcutContainerView
- 包含快捷键的底部视图shortcutItemView
- 底部视图中的快捷键项
要自定义应用程序中所有Fastis控制器,请使用 FastisConfig.default
FastisConfig.default.monthHeader.labelColor = .red
要自定义特定的FastisController实例
var customConfig = FastisConfig.default
customConfig.controller.dayCell.dateLabelColor = .blue
let fastisController = FastisController(mode: .range, config: customConfig)
鸣谢
- Ilya Kharlamov (@ilia3546)
许可证
Fastis 在 MIT 许可证下发布。详情请参阅 LICENSE。