I had the same issue on my tableView(swift 4.2), it could be fixed with allowsMultipleSelection
property on tableView.
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.
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.
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:
!!!
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")
}
tableView:didSelectRowAtIndexPath:
? – gerry3