【问题标题】:Can I only load a viewcontroller once?我只能加载一次视图控制器吗?
【发布时间】:2019-01-03 23:26:14
【问题描述】:

我制作了一个带有城市列表的表格视图。当我选择一个城市单元格时,它将传递城市名称并使用故事板中的 segue 显示城市的天气预报。然而,每次它似乎都会创建一个新的视图控制器。但我不希望它像这样发生。我希望它只能加载一次。对于用户来说,当他们没有互联网时,他们仍然可以看到数据,我为他们制作了一个刷新数据的按钮。 这是我的代码:

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)
}

但是,使用导航控制器时,我不知道如何将所选单元格中的城市名称传递给天气视图控制器。 我该如何解决这个问题?谢谢

【问题讨论】:

    标签: ios swift segue navigationcontroller pass-data


    【解决方案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 不可见时将其保留在内存中也不是一个好主意,您必须遵循 create/deinit,因为它是

    【讨论】:

    • 感谢您回答我的问题,我之前尝试过,我投了! WeatherViewcontroller,但它总是说“'UIViewController 类型的值?'没有成员“infoFromViewOne””
    • 在哪里声明 weatherViewController ???它可以声明为 var weatherViewController:UIViewController! 而它应该是 var weatherViewController:WeatherViewController!
    • 我声明为实例变量。我犯了一个小错误,但现在我可以看到 infoFromViewOne。但是,当我测试它时,当我再次按下单元格时关闭互联网时,它仍然无法保留数据。
    • 更新:现在可以保留数据,但只能保留一个城市!按cityA,显示CityA,然后按其他城市B,C,D,...仅再次显示CityA。是因为我的结构设计错了吗?
    猜你喜欢
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多