I had the same issue on my tableView(swift 4.2). After debugging and taking lots of time it appeared that table view has a boolean property named allowsMultipleSelection
.
If allowsMultipleSelection
is set to true
the table view selection mechanism will change in a way that by selecting each cell the tableView didSelectRowAtIndexPath:
is called for the first time and by selecting the same cell for the second time the tableView didDeselectRowAtIndexPath:
is called.
This makes tableView didSelectRowAtIndexPath:
function to be called on the third selection for the same cell and so the result is double tap for calling didSelectRowAtIndexPath:
.
It means that if the number of times a cell tapped are odd (1, 3, 5, ...) then always tableView didSelectRowAtIndexPath:
will be called and if the number of times a cell tapped are even (2, 4, 6, ...) then always tableView didDeselectRowAtIndexPath:
will be called.
If you want the tableView didSelectRowAtIndexPath:
to be called on each selection for a cell then the tableView multiple selection has to be set false
, tableView.allowsMultipleSelection = false
.
By doing this, every time the cell is tapped tableView didSelectRowAtIndexPath:
will be called on table view and by selecting another cell tableView didDeselectRowAtIndexPath:
will be called for the cell was selected before and then the tableView didSelectRowAtIndexPath:
will be called for the newly selected cell.
class TableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.allowsMultipleSelection = false
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("This will be called for each cell tap")
}