FUIFilterFormCell
open class FUIFilterFormCell : FUIInlineValidationTableViewCell, FUIPickerFormCell, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout
A UITableViewCell
subclass, which allows a user to read or enter a set of values, using a grid of buttons. Commonly used for composing filters.
The developer should set the following properties on the cell, in their implementation of UITableViewDataSource
cellForRow(at:)
function:
keyName
: The key name of the property.value
: An array of the selected indexes in the control. Uses the same index as thevalueOptions
array.- `valueOptions: A String array, of titles for the buttons in the control
And an onChangeHandler
:
onChangeHandler
: a handler closure, which is invoked on changes to the value
Optionally, the developer may provide
allowsMultipleSelection
: Indicates if multiple buttons may be selected simultaneously (true
). Iffalse
, the control behaves inradio
mode. Defaults totrue
.allowsEmptySelection
: Indicates if the control allows zero items to be selected (true
). If false, then once a value has been selected by the developer or user, taps by the user on the last selected item will be ignored, instead of de-selecting the item. Defaults totrue
.isEditable
: Indicates if the cell’s value may be modified. Defaults totrue
.
Color setting:
Setting text color of filter buttons for a state using setTintColor(_:for:) api. Currently disabled
, normal
and selected
are supported.
cell.setTintColor(UIColor.red, for: .normal)
The following is an example of usage in an application UITableViewController
:
// optionally, create an array of value option to localized string mappings
let buttonTitles: [[String: String]] = [["radius": "Distance"], ["price": "Price"], ["rating": "Ratings"], ["avail": "Availability"]]
// Register FUIFilterFormCell in viewDidLoad() method in the controller.
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.register(FUIFilterFormCell.self, forCellReuseIdentifier: FUIFilterFormCell.reuseIdentifier)
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: FUIFilterFormCell.reuseIdentifier, for: indexPath) as! FUIFilterFormCell
cell.valueOptions = buttonTitles.flatMap { $0.map { $0.value }}
cell.keyName = "Sort By"
cell.value = [1]
cell.allowsMultipleSelection = true
cell.allowsEmptySelection = false
// MARK: implement onChangeHandler
cell.onChangeHandler = { [weak self] newValue in
self.applyFilter(forDimensions: newValue) // here, the cell input is set to a filter function
}
return cell
}
## Theming Supported style classes
fdlFUIFilterFormCell
fdlFUIFilterFormCell_keyLabel
fdlFUIFilterFormCell_item_contentView
fdlFUIFilterFormCell_item_titleLabel
fdlFUIFilterFormCell_item_contentView_selected
fdlFUIFilterFormCell_item_titleLabel_selected
-
Reuse identifier
Declaration
Swift
open class var reuseIdentifier: String { get }
-
The type of the value
Declaration
Swift
public typealias ValueType = [Int]
-
Indicate whether the user can select an item or not. It is set to true by default.
Declaration
Swift
public var isEditable: Bool { get set }
-
isEnabled
andisEditable
are in sync.Declaration
Swift
override public var isEnabled: Bool { get set }
-
The value of the cell.
Declaration
Swift
public var value: [Int] { get set }
-
Implementation of change handler. Is invoked on changes to the
value
property.Declaration
Swift
public var onChangeHandler: ((Array<Int>) -> Void)?
-
The array of the valid options.
Declaration
Swift
@objc public var valueOptions: [String] { get set }
-
Using the a
FUIFilterGroup
to initialize theallowsMultipleSelection
,allowsEmptySelection
,valueOptions
, andvalue
properties. ThevalueOptions
will be thetitle
properties of theFUIFilterItem
objects in the group. And thevalue
property will be set based on theisActive
property of items.Note
TheisActive
property of the items will be updated according to the user actions. There is no need to update them in theonChangeHandler
.Declaration
Swift
public var filterGroup: FUIFilterGroup? { get set }
-
The key name of the cell.
Declaration
Swift
public var keyName: String? { get set }
-
Indicates if user may select multiple values. Defaults to
true
.Declaration
Swift
public var allowsMultipleSelection: Bool { get set }
-
Indicates if empty selection is allowed. Defaults to
true
.Declaration
Swift
public var allowsEmptySelection: Bool { get set }
-
The UILabel holds the key name string.
Declaration
Swift
@IBInspectable @IBOutlet public private(set) weak var keyLabel: UILabel!
-
The collection view containing items to be displayed.
Declaration
Swift
@IBOutlet public private(set) weak var collectionView: UICollectionView!