Перезагрузка ячейки табличного представления после возврата из контроллера подробного представления - Swift - PullRequest
0 голосов
/ 13 октября 2018

Каждая ячейка в моем tableView переходит к контроллеру Detail View, где пользователь может добавить запись в избранное.Когда запись добавлена ​​в избранное, в tableViewCell должно отображаться сердце.

При перезапуске приложения сердце отображается правильно в избранных ячейках.Тем не менее, он показывает только после перезапуска.Я считаю, что мне нужна функция reloadRows, но я не смог найти решение, которое работает как задумано.

Как я могу сделать reloadRows динамическим, чтобы перезагружаемая строка была выбранным indexPath?

Как правило, как только пользователь удалит запись, я хочу, чтобы онбыть в состоянии вернуться к tableView и увидеть сердце в клетке.

Как всегда, любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Если вы не вызываете reloadData, пока находитесь в подробном контроллере, вы можете передать indexPath этому контроллеру и заменить ячейку tableView на обратном пути

Что-то вроде pass indexPathForSelectedRow вdetailViewController, обновите там источник данных и вызовите reloadRows с этим [,4InIndexPAth]

. Может рассказать больше, как только вы покажете действительный код.*

мутирование источника данных, если вы измените его в исходном контроллере, может вызвать некоторые проблемы. любые другие одновременные вызовы tableView / dataSource (в основном для последнего) должны быть исправлены должным образом,Например, если вы делаете с ними что-то еще на viewWillAppear

Основная идея заключается в том, что вы переносите источник данных на новый контроллер и назначаете его ответственным за него каждый раз, когда вы меняете экран.Как только вы закончите с указанным viewController, вы вернетесь и обновите состояние.В случае, если вам необходимо разрешить некоторые одновременные изменения в источнике данных, вы разрешите их на уровне модели и соответственно передадите обновления в свои представления

0 голосов
/ 13 октября 2018

Вам необходимо отправить массив элементов предпочтительных классов, чтобы редактирование отразилось на исходном массиве, затем после редактирования его внутри detailVC, а затем обратно внутри PrevVC, либо

override func viewWillAppear(_ animated:Bool) {
   super.viewWillAppear(animated)
   tableView.reloadData()
}

, либо используйте делегат / NotificationCenter дляперезагрузите таблицу, если вы хотите перезагрузить только отредактированный indexPath, затем создайте переменную var и удерживайте ее, когда нажата кнопка didSelectRowAt , и перезагрузите только этот индекс внутри указанных способов

var index:IndexPath? 
func tableView(_ tableView: UITableView, 
     didSelectRowAt indexPath: IndexPath) { 
    index = indexPath
    // segue / push detail here 
}

с помощью

if let ind = index {
  tableView.reloadRows(at: [ind], with: .none)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...