在视图控制器之间传递数据,不带 segue



我能够以编程方式从一个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我得到零....

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

我总是为图像获取零值,我应该在其中获取图像的字符串名称,任何人都可以指导我哪里出错了以及为什么值没有从一个控制器转移到另一个控制器。

您的代码在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方法的变化了吗?这应该可以做到。

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)

}

最新更新