SelectionViewController 1.3.1

SelectionViewController 1.3.1

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最后发布2017年10月
SwiftSwift 版本3.0
SPM支持 SPM

Vlad AlexaJames Shaw维护。



  • 距离

SelectionViewController



适用于 iOS 的可自定义多选 UIViewController。

特性

  • 简单的设置
  • 单选、多选和分区的选择
  • 可指定复杂的选择需求
  • 必选/可选选择
  • 可配置的 UI
  • 文档

Selection Overview

简单的表格形式,显示选项分区以及额外细节和多项选择。

需求

  • iOS 8.0+
  • Xcode 9
  • Swift 4.0

用法

UI

目前,未提供默认 UI。您应该在 Storyboard 中创建一个具有 Reuse Identifier BasicDetailSelectionViewController(如果提供了 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)

选择行为

使用 selectionTyperequiresSelection 属性设置选择行为。枚举 SelectionType 有两种情况,每种情况都有关联值。

  • .All(min: _, max: _):表示用户在整个表格上选择标准的情况。表格各部分中的选择位置不计入。
  • .Sectioned(sectionMin: _, sectionMax: _, totalMin: _, totalMax: _):表示用户在整个表格上选择标准的情况,并限制表格每个部分的选择。

如果用户针对 .All 选择类型选择了超过 max 的选项,或者针对 .SectionedsectionMax,则按照先入先出的方式取消选择。如果将 requiresSelection 设置为 true,则这些枚举值组合在一起以确定用户是否已进行了有效选择。

这两个变量允许您指定复杂的筛选标准

  • 对于有3个区段的表格,用户可以选择每个区段2-4个选项,总计8个。

      .Sectioned(sectionMin: 2, sectionMax: 4, totalMin: 6, totalMax: 8)
    

为了使常见类型的选择更简单,提供了4个便捷选项

  • Single:只能选择一个项。如果 requiresSelection,则必须且只有一个选择。
  • SingleSectioned:每个区段只能选择一个项。如果 requiresSelection,每个区段必须且只有一个项被选中。
  • Multiple:可以选择多个项。如果 requiresSelection,那么必须从任何区段中选择至少一个项。
  • MultipleSectioned:在给定区段中可以选择多个项。如果 requiresSelection,则必须从每个区段中选择至少一个项。

如果用户未满足选择条件,则会从 dismissSelectionViewController(_:) 方法显示一个警告。可以通过对 SelectionViewController 进行子类化并重写其中之一来配置此警告:

  • errorTitle()
  • errorMessageForInvalidSelection()
  • errorDismissButtonTitle()

获取用户的选择

SelectionViewController 有一个 delegate,用于将结果传达给显示视图。

  • selectionViewControllerRequestsDismissal(_:):假设用户的选项已被选中,然后关闭选择视图。他们的选择可以通过 selectedKeys 属性访问。
  • selectionViewControllerRequestsCancel(_:):忽略这个视图上的用户当前选择,并关闭选择视图。

演示

此存储库包含一个简单的演示,展示了此库的功能。

Demo Start
Selection Overview
Demo End

沟通