Проблема в том, что UITableView не поддерживает все клетки живыми.Клетки многоразовые.Всего несколько ячеек до и после видимой области, размещенной на виде.Попробуйте вызвать метод делегата напрямую.
tableView.delegate?.tableView?(tableView, didSelectRowAt: indexPath)
Если вы хотите вызывать этот метод только для ячеек, доступных в настоящее время в табличном представлении.
if let _ = tableView.cellForRow(at: indexPath) {
tableView.delegate?.tableView?(tableView, didSelectRowAt: indexPath)
}
Вы можете легко преобразовать положение экранав индекс ячейки.