FUIFilterFormCollectionViewCell

open class FUIFilterFormCollectionViewCell : FUIInlineValidationDrawingCollectionViewCell<FUIFilterFormView>, FUIFormCell

A UICollectionViewCell subclass that allows a user to read or enter a set of values using a grid of buttons. This is commonly used for composing filters.

The developer should set the following properties on the cell in their implementation of the UICollectionViewDataSource cellForItem(at:) function:

  • title: The title of the property.
  • value: An array of the selected indexes in the control. Uses the same index as the valueOptions 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 whether multiple buttons may be selected simultaneously (true). If false, the control behaves in “radio” mode. The default is true.
  • allowsEmptySelection: Indicates whether 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 deselecting the item. The default is true.
  • isEditable: Indicates whether the cell’s value may be modified. The default is true.

The following is an example of usage in an application, UICollectionViewController:

 // optionally, create an array of value option to localized string mappings
  let buttonTitles: [[String: String]] = [["radius": "Distance"], ["price": "Price"], ["rating": "Ratings"], ["avail": "Availability"]]

 // Register FUIFilterFormCollectionViewCell in viewDidLoad() method in the controller.
 override func viewDidLoad() {
     super.viewDidLoad()
     self.collectionView.register(FUIFilterFormCollectionViewCell.self, forCellWithReuseIdentifier:
     FUIFilterFormCollectionViewCell.reuseIdentifier)
 }

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: FUIFilterFormCollectionViewCell.reuseIdentifier,
                                                   for: indexPath) as! FUIFilterFormCollectionViewCell

     cell.valueOptions = buttonTitles.flatMap { $0.map { $0.value }}
     cell.title = "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:

 fdlFUIFilterFormCollectionViewCell
 fdlFUIFilterFormCollectionViewCell_title
 fdlFUIFilterFormCollectionViewCell_item_contentView
 fdlFUIFilterFormCollectionViewCell_item_titleLabel
 fdlFUIFilterFormCollectionViewCell_item_contentView_selected
 fdlFUIFilterFormCollectionViewCell_item_titleLabel_selected
  • Reuse identifier

    Declaration

    Swift

    open override class var reuseIdentifier: String { get }
  • The FUIFilterValueView in this view.

    Declaration

    Swift

    public var filterValueView: FUIFilterValueView { get }
  • The style of the cell. It can be configured as .fixed for same width, or .flexible for the dynamic width.

    Declaration

    Swift

    public var buttonStyle: FUIFilterButtonSize { get set }
  • Indicate whether the user can select an item or not. This is set to true by default.

    Declaration

    Swift

    public var isEditable: Bool { get set }
  • isEnabled and isEditable are in sync.

    Declaration

    Swift

    public var isEnabled: Bool { get set }
  • The type of the value.

    Declaration

    Swift

    public typealias ValueType = [Int]
  • The value of the cell.

    Declaration

    Swift

    public var value: [Int] { get set }
  • Implementation of the change handler. This is invoked on changes to the value property.

    Declaration

    Swift

    public var onChangeHandler: (([Int]) -> Void)? { get set }
  • The array of the valid options.

    Note

    Setting this property will be ignored when the filterGroup property is not nil.

    Declaration

    Swift

    @objc
    public var valueOptions: [String] { get set }
  • Uses the FUIFilterGroup to initialize the allowsMultipleSelection, allowsEmptySelection, valueOptions, and value properties. The valueOptions will be the title properties of the FUIFilterItem objects in the group. And the value property will be set based on the isActive property of items.

    Note

    The isActive property of the items will be updated according to the user actions. There is no need to update them in the onChangeHandler.

    Declaration

    Swift

    public var filterGroup: FUIFilterGroup? { get set }
  • Indicates whether the user may select multiple values. The default is true.

    Note

    Setting this property will be ignored when property filterGroup is not nil.

    Declaration

    Swift

    public var allowsMultipleSelection: Bool { get set }
  • Indicates whether empty selection is allowed. The default is true.

    Note

    Setting this property will be ignored when property filterGroup is not nil.

    Declaration

    Swift

    public var allowsEmptySelection: Bool { get set }
  • Indicates whether the control attempts to adjust segment widths based on their content widths. The default is false.

    Declaration

    Swift

    public var apportionsSegmentWidthsByContent: Bool { get set }
  • Sets the button attributes for the specified control state in order to customize the button style. If this is not set, the default Fiori style attributes will be used.

    Declaration

    Swift

    public func setButtonAttributes(_ buttonAttributes: FUISegmentedControlButtonAttributes, for state: FUIControlState)
  • Declaration

    Swift

    open override func prepareForReuse()