Row Selection

Respond to user taps and manage selection state in your data table.

Setting Up the Delegate

class MyViewController: UIViewController, SwiftDataTableDelegate {
    var dataTable: SwiftDataTable!

    override func viewDidLoad() {
        super.viewDidLoad()
        dataTable = SwiftDataTable(data: items, columns: columns)
        dataTable.delegate = self
    }
}

Handling Selection

func didSelectItem(_ dataTable: SwiftDataTable, indexPath: IndexPath) {
    let selectedRow = indexPath.section  // Row index
    let selectedColumn = indexPath.item   // Column index

    print("Selected row \(selectedRow), column \(selectedColumn)")

    // Navigate to detail view
    let item = items[selectedRow]
    showDetail(for: item)
}

Understanding IndexPath

ComponentMeaning
sectionRow index (0-based)
itemColumn index (0-based)

Common Patterns

func didSelectItem(_ dataTable: SwiftDataTable, indexPath: IndexPath) {
    let item = items[indexPath.section]
    let detailVC = DetailViewController(item: item)
    navigationController?.pushViewController(detailVC, animated: true)
}

Show Action Sheet

func didSelectItem(_ dataTable: SwiftDataTable, indexPath: IndexPath) {
    let item = items[indexPath.section]

    let alert = UIAlertController(
        title: item.name,
        message: "Choose an action",
        preferredStyle: .actionSheet
    )

    alert.addAction(UIAlertAction(title: "Edit", style: .default) { _ in
        self.edit(item)
    })

    alert.addAction(UIAlertAction(title: "Delete", style: .destructive) { _ in
        self.delete(item)
    })

    alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))

    present(alert, animated: true)
}

Handling Deselection

You can also respond when a previously selected row is deselected:

func didDeselectItem(_ dataTable: SwiftDataTable, indexPath: IndexPath) {
    let row = indexPath.section
    print("Deselected row \(row)")
    // Update UI, clear detail view, etc.
}

See Delegate Reference for the complete list of delegate methods.