Выполнение перехода после фильтрации в uitableview - PullRequest
2 голосов
/ 12 июня 2019

Я в настоящее время создаю приложение, которое имеет список местоположений в uitableview.Существует также функция фильтрации, позволяющая фильтровать местоположения по категориям.Когда не выполняется фильтрация, uitableviewcell выполняет переход при нажатии, и правильные данные загружаются в целевой viewcontroller.Однако, когда я фильтрую табличное представление, ячейки заполняются правильными данными, но когда я щелкаю по ячейке, конечный контроллер представления всегда загружает данные из первой ячейки в НЕФИЛЬТЕРНОМ табличном представлении.

Код, который я использую:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "shoutoutCell", for: indexPath) as! shoutoutTableViewCell

    var shout = shoutout[indexPath.row]

    if isFiltering == true {
        shout = filteredShoutout[indexPath.row]
      } else {
        shout = shoutout[indexPath.row]
    }

    cell.shoutout = shout
     cell.showsReorderControl = true
    return cell
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)  {
     var object = shoutout[indexPath.row]

    if isFiltering == true {
        object = filteredShoutout[indexPath.row]
    } else {
        object = shoutout[indexPath.row]
    }
   performSegue(withIdentifier: "shoutoutDetailSegue", sender: object)


}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "shoutoutDetailSegue" {
    if let destination = segue.destination as? shoutoutDetailViewController {
      //  destination.shoutoutSelected = sender as! object
        destination.shoutoutSelected = shoutout[(tableView.indexPathForSelectedRow?.row)!]

    }
}
}

1 Ответ

0 голосов
/ 12 июня 2019

Это происходит потому, что вы используете shoutout Array в prepare(for segue даже при фильтрации.

destination.shoutoutSelected = shoutout[(tableView.indexPathForSelectedRow?.row)!]

Измените его на

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "shoutoutDetailSegue" {
    if let destination = segue.destination as? shoutoutDetailViewController {
        // Here `Model` should be your class or struct
        destination.shoutoutSelected = sender as! Model
    }
}

ИЛИ перенесите сюда свою логику с didSelectRowAt

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "shoutoutDetailSegue" {
    if let destination = segue.destination as? shoutoutDetailViewController {
        if isFiltering == true {
            object = filteredShoutout[indexPath.row]
        } else {
            object = shoutout[indexPath.row]
        }
        destination.shoutoutSelected = object
    }
}
...