Могу ли я загрузить контроллер просмотра только один раз?

Я сделал табличное представление со списком городов. Когда я выбираю ячейку города, она передает название города и показывает прогноз погоды в городе, используя переход в раскадровке. Однако каждый раз, когда кажется, что он создает новый контроллер представления. Но я не хочу, чтобы это происходило вот так. Я хочу, чтобы он мог загрузиться только один раз. Для пользователей, когда у них нет Интернета, они все еще могут видеть данные, и я сделал для них кнопку для обновления данных. вот мой код:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        performSegue(withIdentifier: "showCurrentWeather", sender: nil)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showCurrentWeather"{
        let dvc = segue.destination as? WeatherViewController
        let selectedIndexPath = self.tableView.indexPathForSelectedRow
        if let selectedRow = selectedIndexPath?.row{
            dvc?.infoFromViewOne=cityName[selectedRow]

        }
    }

Я пытаюсь использовать навигационный контроллер, чтобы нажать на контроллер просмотра,

   weatherViewController=self.storyboard?.instantiateViewController(withIdentifier: "weatherViewController") as! UIViewController

self.navigationController?.pushViewController(weatherViewController!, animated: true)

и в WeatherViewController я сделал пользовательскую кнопку «Назад», чтобы открыть контроллер представления,

    @objc func backAction(){

    navigationController?.popViewController(animated: true)
}

Однако при использовании навигационного контроллера я не знаю, как передать название города из выбранной ячейки в контроллер представления погоды. Как я могу решить проблему? Спасибо


person Penny Chen    schedule 26.07.2018    source источник


Ответы (1)


Вам нужно использовать его as! WeatherViewController, а не as! UIViewController, так как возврат по умолчанию является необязательным UIViewController

weatherViewController = self.storyboard?.instantiateViewController(withIdentifier: "weatherViewController")    as! WeatherViewController
weatherViewController.infoFromViewOne = cityName[indexPath.row]
self.navigationController?.pushViewController(weatherViewController, animated: true)

Кроме того, хранение VC в памяти, когда он не виден, не является хорошей идеей.

person Sh_Khan    schedule 26.07.2018
comment
спасибо за ответ на мой вопрос, я пробовал раньше, я использовал его как! WeatherViewcontroller, но он всегда говорил, что значение типа «UIViewController?» не имеет члена 'infoFromViewOne' - person Penny Chen; 27.07.2018
comment
где вы объявляете WeatherViewController ??? он может быть объявлен var WeatherViewController:UIViewController!, тогда как должен быть var WeatherViewController:WeatherViewController! - person Sh_Khan; 27.07.2018
comment
Я объявляю как переменную экземпляра. Я немного ошибся, но теперь я вижу файл infoFromViewOne. однако, когда я тестировал его, он все еще не мог сохранить данные, когда я выключаю Интернет при повторном нажатии на ячейку. - person Penny Chen; 27.07.2018
comment
update: теперь можно хранить данные, но только по одному городу! нажмите город A, покажите город A, затем нажмите другой город B, C, D,... снова покажите только город A. это из-за неправильного дизайна моей структуры? - person Penny Chen; 27.07.2018