测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可 | MIT |
发布最后发布 | 2017年10月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由Vlad Alexa,James Shaw维护。
适用于 iOS 的可自定义多选 UIViewController。
简单的表格形式,显示选项分区以及额外细节和多项选择。
目前,未提供默认 UI。您应该在 Storyboard 中创建一个具有 Reuse Identifier Basic
和 Detail
的 SelectionViewController
(如果提供了 details
- 请见下文)。应该在 UITableViewCell
子类中配置选项。
class SelectionTableViewCell: UITableViewCell, SelectionCell {
@IBOutlet var titleLabel: UILabel?
@IBOutlet var detailLabel: UILabel?
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
accessoryType = selected ? .Checkmark : .None
}
}
当你想要显示选择时,从 Storyboard 中实例化你的选择视图控制器,并使用 setOptions(_:withDetails:sectionTitles:orderedAs:)
配置选项。这是设置选择数据的关键方法。
一个 SelectionViewController
的数据使用四个属性设置:
options: NSDictionary<id, id>
:一个将唯一键与显示给用户的值链接的字典。默认实现假设值是字符串,但是你可以继承 SelectionViewController
并且覆盖 tableview(_:cellForRowAtIndexPath:)
来处理值和细节。键用于允许对具有多个本地化显示值的特定选项进行一致引用。sortedOptionKeys: NSArray<NSArray<id> *>
:键的数组。这定义了分区以及分区中选项的顺序。sectionTitles: NSArray<NSString *>
:分区的标题数组。这应该有与 orderedSectionKeys
相同的计数,否则将抛出一个索引超出范围异常。details: NSDictionary
:选项键和与之相关联的任何额外对象的字典。每个属性都是只读的,因为单独设置它们可能会破坏数据源。因此,使用组合设置方法。
上图中的简单示例使用以下内容
let options = ["OA":"Option A",
"OB":"Option B",
"OC":"Option C",
"CA":"Choice A",
"CB":"Choice B",
"CC":"Choice C"]
let order = [["OA", "OB", "OC"], ["CA", "CB", "CC"]]
let titles = ["Options", "Choices"]
let details = ["OB": "Extras", "CA": "Extras"]
selectionVC.setOptions(options, withDetails: details, sectionTitles: titles, orderedAs: order)
使用 selectionType
和 requiresSelection
属性设置选择行为。枚举 SelectionType 有两种情况,每种情况都有关联值。
.All(min: _, max: _)
:表示用户在整个表格上选择标准的情况。表格各部分中的选择位置不计入。.Sectioned(sectionMin: _, sectionMax: _, totalMin: _, totalMax: _)
:表示用户在整个表格上选择标准的情况,并限制表格每个部分的选择。如果用户针对 .All
选择类型选择了超过 max
的选项,或者针对 .Sectioned
的 sectionMax
,则按照先入先出的方式取消选择。如果将 requiresSelection
设置为 true
,则这些枚举值组合在一起以确定用户是否已进行了有效选择。
这两个变量允许您指定复杂的筛选标准
对于有3个区段的表格,用户可以选择每个区段2-4个选项,总计8个。
.Sectioned(sectionMin: 2, sectionMax: 4, totalMin: 6, totalMax: 8)
为了使常见类型的选择更简单,提供了4个便捷选项
requiresSelection
,则必须且只有一个选择。requiresSelection
,每个区段必须且只有一个项被选中。requiresSelection
,那么必须从任何区段中选择至少一个项。requiresSelection
,则必须从每个区段中选择至少一个项。如果用户未满足选择条件,则会从 dismissSelectionViewController(_:)
方法显示一个警告。可以通过对 SelectionViewController
进行子类化并重写其中之一来配置此警告:
errorTitle()
errorMessageForInvalidSelection()
errorDismissButtonTitle()
SelectionViewController
有一个 delegate
,用于将结果传达给显示视图。
selectionViewControllerRequestsDismissal(_:)
:假设用户的选项已被选中,然后关闭选择视图。他们的选择可以通过 selectedKeys
属性访问。selectionViewControllerRequestsCancel(_:)
:忽略这个视图上的用户当前选择,并关闭选择视图。此存储库包含一个简单的演示,展示了此库的功能。