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
| Component | Meaning |
|---|---|
| section | Row index (0-based) |
| item | Column index (0-based) |
Common Patterns
Navigate to Detail View
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.