Я думаю, что вы можете выбрать немного другой подход.
В вашей реализации func tableView(UITableView, cellForRowAt: IndexPath) -> UITableViewCell
вы должны переводить indexPath
в один из 23 элементов данных. Это будет верно независимо от того, выполняете ли вы фильтрацию по критериям поиска.
Итак, в вашей реализации func tableView(UITableView, didSelectRowAt: IndexPath)
я бы посоветовал вам сделать точно такой же перевод indexPath
в этой функции, чтобы получить правильный элемент данных.
Поскольку вы реализуете ту же логику, чтобы использовать IndexPath
для получения элемента данных, эта логика, вероятно, должна находиться в одной функции, которую могут совместно использовать обе функции табличного представления.
Пример добавления кода
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let cake = filteredCakes[indexPath.row]
// bake your cell with your cake here
// cell.textLabel.text = cake.description // or whatever
return cell
}
Затем при обработке касания пользователя:
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cake = filteredCakes[indexPath.row]
// do whatever actions you want now that the user has tapped
}