重新加载相同的视图控制器,但信息不同

Posted

技术标签:

【中文标题】重新加载相同的视图控制器,但信息不同【英文标题】:Reload same View Controller but with different information 【发布时间】:2017-11-04 01:55:35 【问题描述】:

我有一个详细视图控制器,我想显示相同的详细视图控制器但具有不同的项目。

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)



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

如何让视图控制器重新加载但使用不同的项目?

【问题讨论】:

您在哪里获取新数据? 您可以使用带有一个单元格的 tableView 并在那里设计您的视图,然后重新加载它以进行更改。 【参考方案1】:

调用 performSegue(withIdentifier:) 而不是 pushViewController。您需要以编程方式注册一个 segue 或通过情节提要添加一个。然后使用 prepare(for segue: sender:) 为目标 V​​iewController 提供您想要的项目。请注意,目标的 viewDidLoad() 在prepareForSegue 之后调用

这是 Apple 推荐的标准方法,用于在目标 ViewController 加载之前为其提供所需的数据。

【讨论】:

【参考方案2】:

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

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

【讨论】:

不要打电话给viewDidLoad;创建一个基于数据设置 UI 元素的函数,并在 viewDidLoad 和加载新数据时调用该函数。 调用 viewDidLoad() 真的很糟糕

以上是关于重新加载相同的视图控制器,但信息不同的主要内容,如果未能解决你的问题,请参考以下文章

我将如何使用相同的视图控制器,但通过它传递不同的信息?

如何重新加载UIPageViewController以在Swift中重新加载其视图

如何重新加载 UIPageViewController 以在 Swift 中重新加载其视图

如果从不同的视图控制器按下返回,则重新加载而不重新加载。迅速

如何在 Xcode 中的不同视图控制器上获取持久 iAd

重新加载根视图控制器