Задать вопрос
GeorgeGeorge
@GeorgeGeorge
Студент

Как перезагрузить UITableView после dismiss другого ViewController'a?

Всем привет! На CategoriesViewController есть TableView, в которую отрисовываю данные из CoreData. Есть кнопка, по нажатию на которую появляется AddCategoryVC модально, на нем происходит добавление новых записей в CoreData, после сохранения данных AddCategoryVC убираю с экрана методом dismiss. Вот теперь встал вопрос как перезагрузить TableView у CategoriesViewController. Пытался передать CategoriesViewController как свойство для AddCategoryVC и перезагрузить таблицу, но не отрабатывает
  • Вопрос задан
  • 369 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
ivanvorobei
@ivanvorobei
iOS разработчик, канал https://t.me/sparrowcode
Вам нужны обсерверы. Подробнее тут.
У кордаты они пугающие, я люблю от Realm.

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

Делегаты, нотификации, viewWillAppear - решения на грани костылей, да простит меня мой коллега.
Ответ написан
Loriens
@Loriens
iOS Developer
Есть много способов это сделать.

Самый простой - обновлять таблицу при появлении CategoriesViewController:
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    tableView.reloadData()
}


Если нужно дополнительно добавлять какую-то информацию из AddCategoryVC, можешь держать CategoriesViewController в качестве делегата внутри AddCategoryVC. Для этого:
1) Описываешь протокол для делегата:
protocol AddCategoryVCDelegate: AnyObject {
    func addCategoryDismissed()
}

2) Хранить в AddCategoryVC делегата (его нужно будет задать при создании контроллера, это будет твой CategoriesViewController):
weak var delegate: AddCategoryVCDelegate?
3) И вызывать его в dismiss completion:
dismiss(animated: true) {
    self.delegate?.addCategoryDismissed()
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы