Colander
Colander 是一个可定制的 UIView 子类,用于显示滚动日历视图。
为什么叫 "Colander"?
因为 Blue Apron 是一家食品公司。
因为 "Colander" 听起来像 "calendar",有点意思。
因为 "CalendarView" 已经被占用了。
安装
Colander 可以通过 CocoaPods 获得。要安装它,只需将以下行添加到您的 Podfile
pod "Colander"
用法
// In YourViewController.swift...
override func viewDidLoad() {
let calendarView = CalendarView()
// Optional (but probably something you'll want to do): register cell and header types
// NOTE: both of these must conform to the Dated protcol, which mandates they have a Date? var with public get and set
calendarView.register(cellType: YourDayCellClass.self)
calendarView.register(supplementaryViewType: YourHeaderViewClass.self, ofKind: UICollectionElementKindSectionHeader)
// Wire up datasource and delegate
calendarView.dataSource = self
calendarView.delegate = self
view.addSubview(calendarView)
// Assuming you're using SnapKit...
calendarView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
}
CalendarView
显示日历的集合视图。支持的功能
-
func select(date: Date)
:选择对应的day
成分的单元格所提供的Date
。 -
func select(dates: [Date])
:对提供的日期调用select(date:)
。 -
func deselect(date: Date)
:取消选择对应的day
成分的单元格所提供的Date
。 -
var selectedDates: [Date]
:所有当前选中日期的只读数组。 -
func select(cellAt indexPath: IndexPath)
:选择提供的索引路径上的单元格。 -
func deselect(cellAt indexPath: IndexPath)
:取消选择提供的索引路径上的单元格。
CalendarViewDataSource
数据源需要实现两个函数:startDate
和 endDate
。这些函数代表 CalendarView 显示的时间范围。
CalendarViewDataSource
还包含一些可选属性
-
calendar
:您希望显示的日历。此属性默认为公历。 -
showsLeadingWeeks
:如果true
(默认行为),日历渲染startDate
月份的每一天。如果false
,最早将显示的日期是startDate
月份的第一天(即,如果startDate
在其月份的最后一周,并且showsLeadingWeeks
为 false,则仅显示包含startDate
的那一周)。 -
showsTrailingWeeks
:如果true
(默认行为),日历渲染endDate
月份的每一天。如果false
,将渲染的最后一个日期是endDate
月份的最后一天。(即,如果endDate
在其月份的第一周,并且showsTrailingWeeks
为 false,则仅显示包含endDate
的那一周)。
CalendarViewDelegate
与 UITableViewDelegate
和 UICollectionViewDelegate
类似,添加对 CalendarViewDelegate
协议的支持完全是可选的。这些函数只是简单地将 UICollectionViewDelegate
函数转发/包装在底层的 UICollectionView
上,并且语义相同。
示例
运行示例项目
- 克隆仓库
- 从示例目录运行
pod install
- 打开
CalendarView.xcworkspace
,构建,并运行
示例项目包含对 CalendarView 的三种不同示例使用
- 基本:使用 Colander 包裹的
CalendarDayCell
,通常是CalendarView
的最简化使用 - 高级:使用自定义的日单元格和标题,高亮显示当前日期的日单元格,支持单选。
- 更高级:与高级相同,但支持多选。还演示了
CalendarView
的select(date:)
函数的使用。
要求
- iOS 8+(由于使用
UIStackView
,示例项目为 iOS 9) - Xcode 8+
依赖
SwiftDate 和 SnapKit 使 Colander 的开发变得更加愉快。
作者
布莱恩·奥尔特曼(Bryan Oltman),[email protected]
许可
Colander 可在 MIT 许可下使用。有关更多信息,请参阅 LICENSE 文件。
第三方许可
SnapKit
版权所有(c)2011-至今 SnapKit 团队 - https://github.com/SnapKit
特此授予任何获得本软件及其相关文档文件(“软件”)副本的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向提供软件的人提供上述使用权,以下条件为准:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的质量保证,无论是明示的还是默示的,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者都不应对任何索赔、损害或任何其他责任(无论是合同侵权还是其他方式)承担责任,该索赔、损害或其他责任源于、由或与软件或其使用或其他方式有关。
SwiftDate
版权所有(c)2015 daniele margutti [email protected]
特此授予任何获得本软件及其相关文档文件(“软件”)副本的人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向提供软件的人提供上述使用权,以下条件为准:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的质量保证,无论是明示的还是默示的,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者都不应对任何索赔、损害或任何其他责任(无论是合同侵权还是其他方式)承担责任,该索赔、损害或其他责任源于、由或与软件或其使用或其他方式有关。