UITableView

Delegate and DataSource

UITableView closures make it easy to implement UITableViewDelegate and UITableViewDataSource protocol methods in an organized way. The following is an example of a simple table view that displays strings in a basic cell.

func loadTableView() {
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")

    tableView
        .numberOfRows { _ in
            countries.count
        }.cellForRow { indexPath in
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
            cell.textLabel!.text = countries[indexPath.row]
            return cell
        }.didSelectRowAt {
            print("\(countries[$0.row]) selected")
        }.reloadData()
}

Arrays

These operations are common. Usually, they involve populating the UITableView with the values from an array. Closures framework gives you a convenient way to pass your array to the table view, so that it can perform the boiler plate operations for you, especially the ones that are required to make the table view perform at a basic level.

Important

Please remember that Swift Arrays are value types. This means that they are copied when mutated. When the values or sequence of your array changes, you will need to call addElements again, just before you call reloadData().
func loadTableView(countries: [String]) {
    tableView
        .addElements(countries, cell: UITableViewCell.self) { country, cell, index in
            cell.textLabel!.text = country
        }.reloadData()
}

Multiple Sections


And finally, you can just as easily have a grouped table view, by binding a 2-dimensional array. Before calling this method, we grouped the countries by their first letter.

func loadTableView(countries: [[String]]) {
    tableView.addSections(
        countries,
        cell: UITableViewCell.self,
        headerTitle: { countryArray,index in
            String(countryArray.first!.first!)},
        row: { country, cell, index in
            cell.textLabel!.text = country
    })

    /**
     This also allows you to override any default behavior so
     you aren't overly committed, even though you're initially binding everything
     to the `Array`.
     */
    tableView
        .estimatedHeightForHeaderInSection { _ in
            30
        }.heightForHeaderInSection { _ in
            30
        }.reloadData()
}
  • This method defaults many of the boilerplate callbacks needed to populate a UITableView when using an Array as a data source. The defaults that this method takes care of:

    • Registers the cell’s class and reuse identifier with a default value
    • Optionally uses a cellNibName value to create the cell from a nib file from the main bundle
    • Handles cell dequeueing and provides a reference to the cell in the row closure for you to modify in place.
    • Provides the number of sections
    • Provides the number of rows

    This method simply sets basic default behavior. This means that you can override the default table view handlers after this method is called. However, remember that order matters. If you call this method after you override the numberOfSectionsIn callback, for instance, the closure you passed into numberOfSectionsIn will be wiped out by this method and you will have to override that closure handler again.

    Important

    Please remember that Swift Arrays are value types. This means that they are copied when mutaded. When the values or sequence of your array changes, you will need to call this method again, just before you call reloadData(). If you have a lot of table view customization in addtion to a lot of updates to your array, it is more appropriate to use the individual closure handlers instead of this method.

    An example of calling this method:

    tableView.addElements(<#myArray#>, cell: <#MyUITableViewCellClass#>.self) { element, cell, index in
        cell.textLabel!.text = <#T##someString(from: element)##String#>
    }
    

    Declaration

    Swift

    public func addElements<Element,Cell>(
            _ elements: [Element],
            cell: Cell.Type,
            cellNibName: String? = nil,
            row: @escaping (_ element: Element, _ cell: inout Cell,_ index: Int) -> Void) -> Self
            where Cell: UITableViewCell

    Parameters

    array

    An Array to be used for each row.

    cell

    A type of cell to use when calling dequeueReusableCell(withIdentifier:for:)

    cellNibName

    If non-nil, the cell will be dequeued using a nib with this name from the main bundle

    row

    A closure that’s called when a cell is about to be shown and needs to be configured.

    Return Value

    itself so you can daisy chain the other datasource calls

  • This method defaults many of the boilerplate callbacks needed to populate a UITableView when using an Array as a data source. The defaults that this method takes care of:

    • Registers the cell’s class and reuse identifier with a default value
    • Optionally uses a cellNibName value to create the cell from a nib file from the main bundle
    • Handles cell dequeueing and provides a reference to the cell in the row closure for you to modify in place.
    • Provides the number of sections
    • Provides the number of rows
    • Calls the headerView handler when each section title view needs to be shown.

    This method simply sets basic default behavior. This means that you can override the default table view handlers after this method is called. However, remember that order matters. If you call this method after you override the numberOfSectionsIn callback, for instance, the closure you passed into numberOfSectionsIn will be wiped out by this method and you will have to override that closure handler again.

    Important

    Please remember that Swift Arrays are value types. This means that they are copied when mutaded. When the values or sequence of your array changes, you will need to call this method again, just before you call reloadData(). If you have a lot of table view customization in addtion to a lot of updates to your array, it is more appropriate to use the individual closure handlers instead of this method.

    An example of calling this method:

    tableView.addSections(
        <#my2dArray#>,
        cell: <#MyUITableViewCellClass#>.self,
        headerView: { array, index in
            <#T##aView(from: array)##UIView#>},
        row: { element, cell, index in
            cell.textLabel!.text = <#T##someString(from: element)##String#>}
    )
    

    Declaration

    Swift

    public func addSections<Element,Cell>(
            _ elements: [[Element]],
            cell: Cell.Type,
            cellNibName: String? = nil,
            headerView: @escaping ((_ elements: [Element], _ index: Int) -> UIView),
            row: @escaping (_ element: Element, _ cell: inout Cell,_ index: Int) -> Void) -> Self
            where Cell: UITableViewCell

    Parameters

    array

    A two dimensional Array to be used for each section.

    cell

    A type of cell to use when calling dequeueReusableCell(withIdentifier:for:)

    cellNibName

    If non-nil, the cell will be dequeued using a nib with this name from the main bundle

    headerView

    A closure that provides the information needed to display the section’s header as an instance of UIView.

    row

    A closure that’s called when a cell is about to be shown and needs to be configured.

    Return Value

    itself so you can daisy chain the other datasource calls

  • This method defaults many of the boilerplate callbacks needed to populate a UITableView when using an Array as a data source. The defaults that this method takes care of:

    • Registers the cell’s class and reuse identifier with a default value
    • Optionally uses a cellNibName value to create the cell from a nib file from the main bundle
    • Handles cell dequeueing and provides a reference to the cell in the row closure for you to modify in place.
    • Provides the number of sections
    • Provides the number of rows
    • Calls the headerView handler when each section title view needs to be shown.

    This method simply sets basic default behavior. This means that you can override the default table view handlers after this method is called. However, remember that order matters. If you call this method after you override the numberOfSectionsIn callback, for instance, the closure you passed into numberOfSectionsIn will be wiped out by this method and you will have to override that closure handler again.

    Important

    Please remember that Swift Arrays are value types. This means that they are copied when mutaded. When the values or sequence of your array changes, you will need to call this method again, just before you call reloadData(). If you have a lot of table view customization in addtion to a lot of updates to your array, it is more appropriate to use the individual closure handlers instead of this method.

    An example of calling this method:

    tableView.addSections(
        <#my2dArray#>,
        cell: <#MyUITableViewCellClass#>.self,
        headerTitle: { array, index in
        <#T##aTitle(from: array)##String#>},
        row: { element, cell, index in
            cell.textLabel!.text = <#T##someString(from: element)##String#>}
    )
    

    Declaration

    Swift

    public func addSections<Element,Cell>(
            _ elements: [[Element]],
            cell: Cell.Type,
            cellNibName: String? = nil,
            headerTitle: ((_ elements: [Element], _ index: Int) -> String)? = nil,
            row: @escaping (_ element: Element, _ cell: inout Cell,_ index: Int) -> Void) -> Self
            where Cell: UITableViewCell

    Parameters

    array

    A two dimensional Array to be used for each section.

    cell

    A type of cell to use when calling dequeueReusableCell(withIdentifier:for:)

    cellNibName

    If non-nil, the cell will be dequeued using a nib with this name from the main bundle

    headerTitle

    A closure that provides the information needed to display the section’s header as a String.

    row

    A closure that’s called when a cell is about to be shown and needs to be configured.

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:willDisplay:forRowAt:) method

    Declaration

    Swift

    public func willDisplay(handler: @escaping (_ cell: UITableViewCell, _ forRowAt: IndexPath) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:willDisplayHeaderView:forSection:) method

    Declaration

    Swift

    public func willDisplayHeaderView(handler: @escaping (_ view: UIView, _ forSection: Int) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:willDisplayFooterView:forSection:) method

    Declaration

    Swift

    public func willDisplayFooterView(handler: @escaping (_ view: UIView, _ section: Int) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:didEndDisplaying:forRowAt:) method

    Declaration

    Swift

    public func didEndDisplaying(handler: @escaping (_ cell: UITableViewCell, _ indexPath: IndexPath) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:didEndDisplayingHeaderView:forSection:) method

    Declaration

    Swift

    public func didEndDisplayingHeaderView(handler: @escaping (_ view: UIView, _ section: Int) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:didEndDisplayingFooterView:forSection:) method

    Declaration

    Swift

    public func didEndDisplayingFooterView(handler: @escaping (_ view: UIView, _ section: Int) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:heightForRowAt:) method

    Declaration

    Swift

    public func heightForRowAt(handler: @escaping (_ indexPath: IndexPath) -> CGFloat) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:heightForHeaderInSection:) method

    Declaration

    Swift

    public func heightForHeaderInSection(handler: @escaping (_ section: Int) -> CGFloat) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:heightForFooterInSection:) method

    Declaration

    Swift

    public func heightForFooterInSection(handler: @escaping (_ section: Int) -> CGFloat) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:estimatedHeightForRowAt:) method

    Declaration

    Swift

    public func estimatedHeightForRowAt(handler: @escaping (_ indexPath: IndexPath) -> CGFloat) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:estimatedHeightForHeaderInSection:) method

    Declaration

    Swift

    public func estimatedHeightForHeaderInSection(handler: @escaping (_ section: Int) -> CGFloat) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:estimatedHeightForFooterInSection:) method

    Declaration

    Swift

    public func estimatedHeightForFooterInSection(handler: @escaping (_ section: Int) -> CGFloat) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:viewForHeaderInSection:) method

    Declaration

    Swift

    public func viewForHeaderInSection(handler: @escaping (_ section: Int) -> UIView?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:viewForFooterInSection:) method

    Declaration

    Swift

    public func viewForFooterInSection(handler: @escaping (_ section: Int) -> UIView?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:accessoryButtonTappedForRowWith:) method

    Declaration

    Swift

    public func accessoryButtonTappedForRowWith(handler: @escaping (_ indexPath: IndexPath) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:shouldHighlightRowAt:) method

    Declaration

    Swift

    public func shouldHighlightRowAt(handler: @escaping (_ indexPath: IndexPath) -> Bool) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:didHighlightRowAt:) method

    Declaration

    Swift

    public func didHighlightRowAt(handler: @escaping (_ indexPath: IndexPath) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:didUnhighlightRowAt:) method

    Declaration

    Swift

    public func didUnhighlightRowAt(handler: @escaping (_ indexPath: IndexPath) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:willSelectRowAt:) method

    Declaration

    Swift

    public func willSelectRowAt(handler: @escaping (_ indexPath: IndexPath) -> IndexPath?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:willDeselectRowAt:) method

    Declaration

    Swift

    public func willDeselectRowAt(handler: @escaping (_ indexPath: IndexPath) -> IndexPath?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:didSelectRowAt:) method

    Declaration

    Swift

    public func didSelectRowAt(handler: @escaping (_ indexPath: IndexPath) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:didDeselectRowAt:) method

    Declaration

    Swift

    public func didDeselectRowAt(handler: @escaping (_ indexPath: IndexPath) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:editingStyleForRowAt:) method

    Declaration

    Swift

    public func editingStyleForRowAt(handler: @escaping (_ indexPath: IndexPath) -> UITableViewCellEditingStyle) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:titleForDeleteConfirmationButtonForRowAt:) method

    Declaration

    Swift

    public func titleForDeleteConfirmationButtonForRowAt(handler: @escaping (_ indexPath: IndexPath) -> String?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:editActionsForRowAt:) method

    Declaration

    Swift

    public func editActionsForRowAt(handler: @escaping (_ indexPath: IndexPath) -> [UITableViewRowAction]?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:shouldIndentWhileEditingRowAt:) method

    Declaration

    Swift

    public func shouldIndentWhileEditingRowAt(handler: @escaping (_ indexPath: IndexPath) -> Bool) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:willBeginEditingRowAt:) method

    Declaration

    Swift

    public func willBeginEditingRowAt(handler: @escaping (_ indexPath: IndexPath) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:didEndEditingRowAt:) method

    Declaration

    Swift

    public func didEndEditingRowAt(handler: @escaping (_ indexPath: IndexPath?) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:targetIndexPathForMoveFromRowAt:toProposedIndexPath:) method

    Declaration

    Swift

    public func targetIndexPathForMoveFromRowAt(handler: @escaping (_ sourceIndexPath: IndexPath, _ proposedDestinationIndexPath: IndexPath) -> IndexPath) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:indentationLevelForRowAt:) method

    Declaration

    Swift

    public func indentationLevelForRowAt(handler: @escaping (_ indexPath: IndexPath) -> Int) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:shouldShowMenuForRowAt:) method

    Declaration

    Swift

    public func shouldShowMenuForRowAt(handler: @escaping (_ indexPath: IndexPath) -> Bool) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:canPerformAction:forRowAt:withSender:) method

    Declaration

    Swift

    public func canPerformAction(handler: @escaping (_ action: Selector, _ indexPath: IndexPath, _ sender: Any?) -> Bool) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:performAction:forRowAt:withSender:) method

    Declaration

    Swift

    public func performAction(handler: @escaping (_ action: Selector, _ indexPath: IndexPath, _ sender: Any?) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:canFocusRowAt:) method

    Declaration

    Swift

    public func canFocusRowAt(handler: @escaping (_ indexPath: IndexPath) -> Bool) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:shouldUpdateFocusIn:) method

    Declaration

    Swift

    public func shouldUpdateFocus(handler: @escaping (_ context: UITableViewFocusUpdateContext) -> Bool) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:didUpdateFocusIn:with:) method

    Declaration

    Swift

    public func didUpdateFocus(handler: @escaping (_ context: UITableViewFocusUpdateContext, _ coordinator: UIFocusAnimationCoordinator) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s indexPathForPreferredFocusedView(in:) method

    Declaration

    Swift

    public func indexPathForPreferredFocusedView(handler: @escaping () -> IndexPath?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDataSource’s tableView(_:numberOfRowsInSection:) method

    Declaration

    Swift

    public func numberOfRows(handler: @escaping (_ section: Int) -> Int) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent datasource method

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDataSource’s tableView(_:cellForRowAt:) method

    Declaration

    Swift

    public func cellForRow(handler: @escaping (_ indexPath: IndexPath) -> UITableViewCell) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent datasource method

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDataSource’s numberOfSections(in:) method

    Declaration

    Swift

    public func numberOfSectionsIn(handler: @escaping () -> Int) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent datasource method

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDataSource’s tableView(_:titleForHeaderInSection:) method

    Declaration

    Swift

    public func titleForHeaderInSection(handler: @escaping (_ section: Int) -> String?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent datasource method

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDataSource’s tableView(_:titleForFooterInSection:) method

    Declaration

    Swift

    public func titleForFooterInSection(handler: @escaping (_ section: Int) -> String?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent datasource method

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDataSource’s tableView(_:canEditRowAt:) method

    Declaration

    Swift

    public func canEditRowAt(handler: @escaping (_ indexPath: IndexPath) -> Bool) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent datasource method

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDataSource’s tableView(_:canMoveRowAt:) method

    Declaration

    Swift

    public func canMoveRowAt(handler: @escaping (_ indexPath: IndexPath) -> Bool) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent datasource method

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDataSource’s sectionIndexTitles(for:) method

    Declaration

    Swift

    public func sectionIndexTitles(handler: @escaping () -> [String]?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent datasource method

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDataSource’s tableView(_:sectionForSectionIndexTitle:at:) method

    Declaration

    Swift

    public func sectionForSectionIndexTitle(handler: @escaping (_ title: String, _ index: Int) -> Int) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent datasource method

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDataSource’s tableView(_:commit:forRowAt:) method

    Declaration

    Swift

    public func commit(handler: @escaping (_ editingStyle: UITableViewCellEditingStyle, _ indexPath: IndexPath) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent datasource method

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDataSource’s tableView(_:moveRowAt:to:) method

    Declaration

    Swift

    public func moveRowAt(handler: @escaping (_ sourceIndexPath: IndexPath, _ destinationIndexPath: IndexPath) -> Void) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent datasource method

    Return Value

    itself so you can daisy chain the other datasource calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:leadingSwipeActionsConfigurationForRowAt:) method

    Declaration

    Swift

    public func leadingSwipeActionsConfigurationForRowAt(handler: @escaping (_ indexPath: IndexPath) -> UISwipeActionsConfiguration?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:trailingSwipeActionsConfigurationForRowAt:) method

    Declaration

    Swift

    public func trailingSwipeActionsConfigurationForRowAt(handler: @escaping (_ indexPath: IndexPath) -> UISwipeActionsConfiguration?) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Equivalent to implementing UITableViewDelegate’s tableView(_:shouldSpringLoadRowAt:) method

    Declaration

    Swift

    public func shouldSpringLoadRowAt(handler: @escaping (_ indexPath: IndexPath, _ context: UISpringLoadedInteractionContext) -> Bool) -> Self

    Parameters

    handler

    The closure that will be called in place of its equivalent delegate method

    Return Value

    itself so you can daisy chain the other delegate calls

  • Clears any delegate/dataSource closures that were assigned to this UITableView. This cleans up memory as well as sets the delegate/dataSource properties to nil. This is typically only used for explicit cleanup. You are not required to call this method.

    Declaration

    Swift

    @objc override public func clearClosureDelegates()