【问题标题】: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 并在那里设计您的视图,然后重新加载它以进行更改。

标签: ios swift null segue viewcontroller


【解决方案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() 真的很糟糕
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    相关资源
    最近更新 更多