Swift: Как перезагрузить новый контент (например, массив) каждый раз, когда появляется табличное представление? - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть панель вкладок с двумя представлениями:

  • tablview
  • просмотр контроллера для добавления данных

Тогда у меня есть массив, который будет обновляться из контроллера представления новым содержимым (например, просто добавлять новые строки).

Этот массив заполняет табличное представление. Теперь, когда приложение запускает табличное представление, показывает все содержимое массивов, но когда я перемещаюсь через панель вкладок в контроллер представления, добавляю содержимое в массив и возвращаюсь через панель вкладок к табличному представлению, я не могу обновить табличное представление так что он вытягивает новое содержимое из массива.

Я пытался использовать tableview.reloadData() в viewDidAppear и viewDidLoad, но табличное представление не перезагружается и по-прежнему показывает данные, которые оно первоначально загрузило при запуске приложения, но не новое содержимое.

override func viewWillAppear(_ animated: Bool) {
        tableView.reloadData()
        weightArray = UserDefaults.standard.array(forKey: "favorites") as! [String]
    }

Вот как я заполняю таблицу:

// MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return weightArray.count
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellIdentifier = "FavoriteCell"
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath)

        let weights = weightArray[indexPath.row]
        cell.textLabel?.text = weights

        return cell
    }

1 Ответ

0 голосов
/ 27 апреля 2018

Ваш reloadData() вызов перед обновлением массива.

Должно быть после обновления источника данных:

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

    weightArray = UserDefaults.standard.array(forKey: "favorites") as! [String]
    tableView.reloadData()    
}

В любом случае вы можете использовать наблюдатель свойства didSet вашего объекта источника данных.

//your weightArray declaration
var weightArray = [String]() {
    didSet {
        tableView.reloadData()
    }
}

и тогда вы можете сделать:

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

    weightArray = UserDefaults.standard.array(forKey: "favorites") as! [String]   
}

Таким образом, каждый раз, когда вы меняете массив, ваш tableView будет перезагружаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...