【问题标题】:Pass data between viewcontroller with out segues在视图控制器之间传递数据而没有 segues
【发布时间】:2023-03-22 02:13:01
【问题描述】:

我能够在没有任何故事板的情况下以编程方式从一个ViewController 移动到另一个,现在是我需要传输数据的部分,在我的rootViewController 中,我有这种形式的数据:

var restaurants:[Restaurant] = [
          Restaurant(name: "Cafe Deadend",  image: "cafedeadend.jpg", isVisited: false),
          Restaurant(name: "Homei", image: "homei.jpg", isVisited: false) ]

当然Restaurant 是我的模型部分中的一个类....

现在在我的根控制器中,我像这样移动到另一个控制器......

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        
        let detailView: DetailViewController = DetailViewController()
        
       
         detailView.restaurant = restaurants[indexPath.row]
        self.navigationController?.pushViewController(DetailViewController(), animated: false)
        
        
    }

当然在我的DetailViewController 我有这个

var restaurant = Restaurant()

但是在这里,当我尝试在DetailViewController 中显示这样的图像时,期望图像名称与RestaurantViewController 中的代码一起出现我得到 nil....

let imageHeader = UIImageView(frame: CGRect(x: 0, y: 0, width: 400, height: 400))
imageHeader.image = UIImage(named: self.restaurant.image)

我总是得到图像的 nil 值,我应该得到图像的字符串名称,谁能指导我哪里出错了,为什么值没有从一个控制器转移到另一个控制器。

【问题讨论】:

  • 这能回答你的问题吗? Passing Data between View Controllers
  • var restaurant = Restaurant() 将覆盖您之前使用detailView.restaurant = restaurants[indexPath.row] 设置的餐厅。
  • 您在哪里创建了 DetailViewController 中的var restaurant = Restaurant()DetailViewController 是以编程方式创建的还是使用故事板创建的?
  • 它是一个单独的类 .swift 文件,以编程方式,谢谢

标签: ios swift uiimageview


【解决方案1】:

您的代码在您的didSelectRowAt 中有问题,因为您没有将先前创建的DetailViewController 传递给餐厅,而是另一个新创建的DetailViewController,试试这个:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  let detailView: DetailViewController = DetailViewController()
  detailView.restaurant = restaurants[indexPath.row]
  self.navigationController?.pushViewController(detailView, animated: false)
}

看到pushViewController 方法的变化了吗?应该这样做。

【讨论】:

    【解决方案2】:
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){
        let storyboard = UIStoryboard(name: "Main", bundle: nil) // change storyboard name here..
        let detailView = storyboard.instantiateViewController(withIdentifier: 
        "DetailViewController") as! DetailViewController // check View controller identifier
        detailView.restaurant = restaurants[indexPath.row]
        navigationController?.pushViewController(detailView, animated: true)
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 2017-01-11
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      相关资源
      最近更新 更多