RVS_AutofillTextField

@IBDesignable
open class RVS_AutofillTextField : UITextField
extension RVS_AutofillTextField: UITableViewDataSource
extension RVS_AutofillTextField: UITableViewDelegate

This class extends the standard UITextField widget to provide a realtime “dropdown” menu of possible autocomplete choices (in a table and modal-style screen). The dropdown is always displayed below the text field, and is attached to the main window root view (so it appears over everything else). It is not modal. If the user selects a value from the table, that entire string is entered into the text field, and the dropdown is dismissed. The dropdown is dismissed whenever focus leaves the text item. When focus is set to the text field, the current text is evaluated, and a dropdown may appear, if required. If the autofill functionality is not available, or is explicitly deactivated, the text item behaves exactly like a standard UITextField. NB: When assigning a delegate, the caller needs to be a UITextFieldDelegate, even if they are not using any of the delegate functionality. This is because we “piggyback” on the built-in delegate. This also means that the delegate must be an NSObject.

Default Values

  • The default value for case sensitivity (OFF)

    Declaration

    Swift

    public static let defaultIsCaseSensitive: Bool
  • The default value for wildcards before (OFF)

    Declaration

    Swift

    public static let defaultIsWildcardBefore: Bool
  • The default value for wildcards after (ON)

    Declaration

    Swift

    public static let defaultIsWildcardAfter: Bool
  • The default value for maximum count (5)

    Declaration

    Swift

    public static let defaultMaximumCount: Int

Public Properties

  • When the table comes up, this will be the color. The default is the standard system color, with a reduced alpha.

    Declaration

    Swift

    @IBInspectable
    public var tableBackgroundColor: UIColor { get set }
  • This is the text color to use in the table. Default is label color.

    Declaration

    Swift

    @IBInspectable
    public var tableTextColor: UIColor { get set }
  • The minimum width of the table. It will be at least this wide, and will follow the width of the edit text item, if it is bigger. It will also never go beyond the trailing edge of the screen.

    Declaration

    Swift

    @IBInspectable
    public var minimumTableWidthInDisplayUnits: CGFloat { get set }
  • This is the maximum number of results to be returned. Default is 5. If -1, then there is no limit.

    Declaration

    Swift

    @IBInspectable
    public var maximumAutofillCount: Int { get set }
  • This is a “circuit breaker” for the autofill capability. Default is on. If Off, the autofill will not be shown.

    Declaration

    Swift

    @IBInspectable
    public var isAutoFillOn: Bool { get set }
  • This specifies whether or not matches are case-blind (default), or case-sensitive (true).

    Declaration

    Swift

    @IBInspectable
    public var isCaseSensitive: Bool { get set }
  • If true (default is false), then the match is made at the end of the string.

    Declaration

    Swift

    @IBInspectable
    public var isWildcardBefore: Bool { get set }
  • If true (default is true), then the match is made at the beginning of the string.

    Declaration

    Swift

    @IBInspectable
    public var isWildcardAfter: Bool { get set }
  • This allows us to assign an explicit “container” view for the popover. Default is nil. If not provided, the main window, itself, is used.

    Declaration

    Swift

    public weak var containerView: UIView?
  • This is the data source for this widget. Be aware that this is a strong reference. This is not inspectable, and must be assigned programmatically.

    Declaration

    Swift

    public var dataSource: RVS_AutofillTextFieldDataSource?
  • This is the font to use. It must be set programmatically. By default, it is system 20.

    Declaration

    Swift

    public var tableFont: UIFont

Public Methods

  • Called to close the table view, and, possibly, resign as first responder.

    Declaration

    Swift

    public func closeTableViewAndResignFirstResponder()
  • If the table is open, when this is called, it will do a reloadData().

    Declaration

    Swift

    public func refreshTable()

Public Base Class Overrides

  • This makes sure that we create or move the table, if we are no longer the focus.

    Declaration

    Swift

    @discardableResult
    public override func becomeFirstResponder() -> Bool
  • This makes sure that we remove the table, if we are no longer the focus.

    Declaration

    Swift

    @discardableResult
    public override func resignFirstResponder() -> Bool
  • Called when we trigger a layout. We use this to register our callback.

    Declaration

    Swift

    public override func layoutSubviews()
  • Called when we are being removed from our superview. We remove the callback (just to be sure -belt and suspenders).

    Declaration

    Swift

    public override func removeFromSuperview()

UITableViewDataSource Conformance

  • This returns the number of rows to display in the autofill table.

    Declaration

    Swift

    public func tableView(_: UITableView, numberOfRowsInSection: Int) -> Int

    Return Value

    The number of rows to display.

  • This returns one cell of the table, with the specific autofill suggestion. The text is attributed, so the match is made slightly more prominent than the unmatched text.

    Declaration

    Swift

    public func tableView(_ inTableView: UITableView, cellForRowAt inIndexPath: IndexPath) -> UITableViewCell

    Parameters

    inTableView

    The table view.

    cellForRowAt

    The index of the cell to be returned (section will always be 0).

    Return Value

    A new, simple, default cell, with an attributed text content.

UITableViewDelegate Conformance

  • This reacts to the user selecting a suggested text item. It sets the edit field text to the selected text, and closes the table.

    Declaration

    Swift

    public func tableView(_ inTableView: UITableView, didSelectRowAt inIndexPath: IndexPath)

    Parameters

    inTableView

    The table view.

    didSelectRowAt

    The index of the selected row,