11//
22// OptionPickerControl.swift
3- // Flashcards
3+ // ICInputAccessory
44//
55// Created by Ben on 27/11/2017.
66// Copyright © 2017 bcylin.
2626
2727import UIKit
2828
29- open class OptionPickerControl < T: OptionDescriptive > : UIControl ,
30- UIPickerViewDataSource ,
31- UIPickerViewDelegate {
29+ /// A `UIControl` that displays a `UIPickerView` and notifies changed selection and via `UIControlEvents` `.valueChanged`.
30+ open class OptionPickerControl < T: OptionDescriptive > : UIControl , UIPickerViewDataSource , UIPickerViewDelegate {
3231
3332 // MARK: - Initialization
3433
34+ /// Returns an initialized `OptionPickerControl`.
3535 public init ( ) {
3636 super. init ( frame: . zero)
3737 addSubview ( hiddenTextField)
3838 }
3939
40+ /// Not supported. `OptionPickerControl` is not compatible with storyboards.
4041 required public init ? ( coder aDecoder: NSCoder ) {
4142 fatalError ( " init(coder:) is not supported " )
4243 }
4344
4445 // MARK: - Properties
4546
47+ /// Options that shows in the `UIPickerView`.
4648 public var options : [ Option < T > ] = [ Option< T> . optional( ) ]
49+
50+ /// The currently selected item in the options.
4751 public var selectedOption : Option < T > = Option< T> . optional( ) {
4852 didSet {
4953 if hiddenTextField. isFirstResponder {
@@ -54,6 +58,14 @@ open class OptionPickerControl<T: OptionDescriptive>: UIControl,
5458 }
5559 }
5660
61+ /// A reference to the displayed `UIPickerView` for customization.
62+ public private( set) lazy var picker : UIPickerView = {
63+ let picker = UIPickerView ( )
64+ picker. dataSource = self
65+ picker. delegate = self
66+ return picker
67+ } ( )
68+
5769 // MARK: - Lazy Instantiation
5870
5971 private lazy var doneBarButton : UIBarButtonItem =
@@ -68,13 +80,6 @@ open class OptionPickerControl<T: OptionDescriptive>: UIControl,
6880 return toolbar
6981 } ( )
7082
71- private lazy var picker : UIPickerView = {
72- let picker = UIPickerView ( )
73- picker. dataSource = self
74- picker. delegate = self
75- return picker
76- } ( )
77-
7883 private lazy var hiddenTextField : UITextField = {
7984 let textField = UITextField ( )
8085 textField. inputAccessoryView = self . pickerToolbar
@@ -96,6 +101,7 @@ open class OptionPickerControl<T: OptionDescriptive>: UIControl,
96101
97102 // MARK: - UIPickerViewDataSource
98103
104+ /// Currently `OptionPickerControl` only supports one component.
99105 open func numberOfComponents( in pickerView: UIPickerView ) -> Int {
100106 return 1
101107 }
0 commit comments