重新加载相同的视图控制器,但信息不同
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:) 为目标 ViewController 提供您想要的项目。请注意,目标的 viewDidLoad() 在prepareForSegue 之后调用。
这是 Apple 推荐的标准方法,用于在目标 ViewController 加载之前为其提供所需的数据。
【讨论】:
【参考方案2】:而不是将相同的视图控制器推送到导航堆栈上。尝试将所有更新 UI 元素的逻辑安排到一个方法中。在viewDidLoad()
中调用此方法。打电话给self.viewDidLoad()
不是一个好主意。
使用观察者模式并调用更新 UI 元素的方法。
【讨论】:
不要打电话给viewDidLoad
;创建一个基于数据设置 UI 元素的函数,并在 viewDidLoad
和加载新数据时调用该函数。
调用 viewDidLoad() 真的很糟糕以上是关于重新加载相同的视图控制器,但信息不同的主要内容,如果未能解决你的问题,请参考以下文章
如何重新加载UIPageViewController以在Swift中重新加载其视图
如何重新加载 UIPageViewController 以在 Swift 中重新加载其视图