ADBoundSegmentedControl

@IBDesignable open class ADBoundSegmentedControl: UISegmentedControl, ADBindable

Creates a segmented control that can be bound to a value from a data model that conforms to the Codable protocol when placed on a ADBoundViewController view. Use the dataPath property to specify the field from the bound data model to select the segment from or use a formula in a SQL like syntax. Use the byTitle property to decide if the segment is selected by title or integer position.

Example:

// Given the following class
class Category: ADDataTable {

    enum CategoryType: String, Codable {
        case local
        case web
    }

    static var tableName = "Categories"
    static var primaryKey = "id"
    static var primaryKeyType: ADDataTableKeyType = .computedInt

    var id = 0
    var added = Date()
    var name = ""
    var description = ""
    var enabled = true
    var highlightColor = UIColor.white.toHex()
    var type: CategoryType = .local
    var icon: Data = UIImage().toData()

    required init() {

    }
}

// Bind the segemented control to the type field
mySegment.dataPath = "type"
  • The name of the field from the date model used to populate the value from.

    Example:

    // Given the following class
    class Category: ADDataTable {
    
        enum CategoryType: String, Codable {
            case local
            case web
        }
    
        static var tableName = "Categories"
        static var primaryKey = "id"
        static var primaryKeyType: ADDataTableKeyType = .computedInt
    
        var id = 0
        var added = Date()
        var name = ""
        var description = ""
        var enabled = true
        var highlightColor = UIColor.white.toHex()
        var type: CategoryType = .local
        var icon: Data = UIImage().toData()
    
        required init() {
    
        }
    }
    
    // Bind the segemented control to the type field
    mySegment.dataPath = "type"
    

    Remark

    The case and name of the field specified in the dataPath property must match the case and name from the data model bound to the ADBoundViewController.

    Declaration

    Swift

    @IBInspectable public var dataPath: String = ""
  • The name of the field from the date model or forumla (using SQL syntax) used to set the enabled state from.

    Example:

    // Given the following class
    class Category: ADDataTable {
    
        enum CategoryType: String, Codable {
            case local
            case web
        }
    
        static var tableName = "Categories"
        static var primaryKey = "id"
        static var primaryKeyType: ADDataTableKeyType = .computedInt
    
        var id = 0
        var added = Date()
        var name = ""
        var description = ""
        var enabled = true
        var highlightColor = UIColor.white.toHex()
        var type: CategoryType = .local
        var icon: Data = UIImage().toData()
    
        required init() {
    
        }
    }
    
    // Bind the segmented control to the enabled field
    mySegmentedControl.enabledPath = "enabled"
    

    Remark

    The case and name of the field specified in the enabledPath property must match the case and name from the data model bound to the ADBoundViewController. Optionally, the value can be a forumla using a subset of the SQL syntax.

    Declaration

    Swift

    @IBInspectable public var enabledPath: String = ""
  • The name of the field from the date model or forumla (using SQL syntax) used to set the hidden state from.

    Example:

    // Given the following class
    class Category: ADDataTable {
    
        enum CategoryType: String, Codable {
            case local
            case web
        }
    
        static var tableName = "Categories"
        static var primaryKey = "id"
        static var primaryKeyType: ADDataTableKeyType = .computedInt
    
        var id = 0
        var added = Date()
        var name = ""
        var description = ""
        var enabled = true
        var quantity = 0
        var highlightColor = UIColor.white.toHex()
        var type: CategoryType = .local
        var icon: Data = UIImage().toData()
    
        required init() {
    
        }
    }
    
    // Set the hidden state based on a formula.
    mySegmentedControl.hiddenPath = "quantity > 0"
    

    Remark

    The case and name of the field specified in the hiddenPath property must match the case and name from the data model bound to the ADBoundViewController. Optionally, the value can be a forumla using a subset of the SQL syntax.

    Declaration

    Swift

    @IBInspectable public var hiddenPath: String = ""
  • The name of the field from the date model or forumla (using SQL syntax) used to set the tint color from.

    Example:

    // Given the following class
    class Category: ADDataTable {
    
        enum CategoryType: String, Codable {
            case local
            case web
        }
    
        static var tableName = "Categories"
        static var primaryKey = "id"
        static var primaryKeyType: ADDataTableKeyType = .computedInt
    
        var id = 0
        var added = Date()
        var name = ""
        var description = ""
        var enabled = true
        var quantity = 0
        var highlightColor = UIColor.white.toHex()
        var type: CategoryType = .local
        var icon: Data = UIImage().toData()
    
        required init() {
    
        }
    }
    
    // Set the text color based on a formula.
    mySegmentedControl.colorPath = "highlightColor"
    

    Remark

    The case and name of the field specified in the colorPath property must match the case and name from the data model bound to the ADBoundViewController. Optionally, the value can be a forumla using a subset of the SQL syntax.

    Declaration

    Swift

    @IBInspectable public var colorPath: String = ""
  • If true this segmented control causes the parent ADBoundViewController to update the form as the value changes.

    Declaration

    Swift

    @IBInspectable public var liveUpdate: Bool = false
  • Provides a link to the ADBoundViewController that the control is bound to.

    Declaration

    Swift

    public weak var controller: ADBoundViewController?
  • Provides a unique ID that is assigned to the control when it is bound to a ADBoundViewController.

    Remark

    You should never set or change this number yourself, this value will be managed by the ADBoundViewController and is used to handle form and keyboard events.

    Declaration

    Swift

    public var formID: Int = -1
  • If true the segment is selected by its title, else it is selected by its integer position.

    Declaration

    Swift

    @IBInspectable public var byTitle: Bool = true
  • Returns true if the value of the control can be edited by the user, else returns false.

    Declaration

    Swift

    public var isMutable: Bool
  • Undocumented

    Declaration

    Swift

    @IBDesignable open class ADBoundSegmentedControl: UISegmentedControl, ADBindable
  • Sets the selected segment based on the given value and the state of the byTitle property. If byTitle is true, the segment matching the value will be selected, else the value will be used as the integer position of the segment to select.

    Declaration

    Swift

    public func setValue(_ value: Any)

    Parameters

    value

    The value to set the label to.

  • Sets the enabled state of the control from the given value. If the value is an Int or Float, 0 and 1 will be converted to false and true. If the value is a String, yes, on, true, 1 will be converted to true, all other values will result in false.

    Declaration

    Swift

    public func setEnabledState(_ value: Any)

    Parameters

    value

    The value to set the enabled state from.

  • Sets the hidden state of the control from the given value. If the value is an Int or Float, 0 and 1 will be converted to false and true. If the value is a String, yes, on, true, 1 will be converted to true, all other values will result in false.

    Declaration

    Swift

    public func setHiddenState(_ value: Any)

    Parameters

    value

    The value to set the enabled state from.

  • Sets the tint color from the given value. If the value is a string, this routine will assume it holds a hex color specification in the form #RRGGBBAA.

    Declaration

    Swift

    public func setTintColor(_ value: Any)

    Parameters

    value

    The value to set the text color from.

  • Sets any control specific bound states (such as colors) with the values from the given ADRecord.

    Declaration

    Swift

    public func setControlSpecificStates(against data: ADRecord)

    Parameters

    data

    The raw data to bind the additional states to.

  • Returns the value of the selected segment based on the state of the byTitle property. If byTitle is true, the title is returned else the integer position of the selected segment is returned.

    Declaration

    Swift

    public func getValue() -> Any

    Return Value

    The title or the position of the selected segment based on the byTitle property.