2017-11-04 131 views
0

我有一个细节视图控制器,我想显示相同的细节视图控制器,但与不同的项目。重新加载相同的视图控制器,但具有不同的信息

var nexttype : Type! 
let nexttypeVC = TypeDetailVC() 


@IBAction func buttonTapped(_ sender: UITapGestureRecognizer) { 

    nexttype = type.Array![0] 
    nexttypeVC.type = next.type 

    self.navigationController?.pushViewController(nexttypeVC, animated: true) 


} 

当我打印的名称或我得到一个正确的项目的标识,但是当我启动模拟器我得到的错误。标签的值和一切都是零。

我该如何告诉视图控制器重新加载,但使用不同的项目?

+0

你在哪里获得新数据? – ivarun

+0

你可以在一个单元格中使用一个tableView,并在那里设计你的视图,然后重新加载它进行更改。 –

回答

-4

而不是将相同的视图控制器推到导航堆栈上。尝试安排所有的逻辑来将UI元素更新到方法中。在viewDidLoad()中调用此方法。调用self.viewDidLoad()不是一个好主意。

使用观察者模式并调用更新UI元素的方法。

+0

谢谢!有效! – Maruta

+2

不要调用'viewDidLoad';创建一个函数,该函数根据数据设置UI元素,并从'viewDidLoad'和当您加载新数据时调用该函数。 – Paulw11

+1

调用viewDidLoad() – OverD

0

调用performSegue(withIdentifier :)而不是pushViewController。您需要以编程方式注册赛格或通过故事板添加一个。然后使用prepare(for segue:sender :)为目标ViewController提供所需的项目。请注意,目标的viewDidLoad()在 prepareForSegue之后被调用

这是苹果推荐的标准方式,可以在目标ViewController加载之前为其目标ViewController加载数据。

相关问题