【发布时间】:2017-07-04 11:40:43
【问题描述】:
我想在后按时刷新整个页面控制器。 我正在使用代码导航视图控制器。
我的代码
let GTC = self.storyboard?.instantiateViewController(withIdentifier: "GoToCart")as! GoToCart
self.navigationController?.pushViewController(GTC, animated: true)
【问题讨论】:
我想在后按时刷新整个页面控制器。 我正在使用代码导航视图控制器。
我的代码
let GTC = self.storyboard?.instantiateViewController(withIdentifier: "GoToCart")as! GoToCart
self.navigationController?.pushViewController(GTC, animated: true)
【问题讨论】:
使用viewWillAppear 重新加载您的用户界面。当您使用navigationController?.pushViewController 时,视图将被保留并存储在堆栈中。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Reload the UI
}
【讨论】:
viewWillAppear 在第一次显示视图时以及再次显示视图时调用,因此在视图控制器对象的生命周期内可以多次调用它。当由于用户点击后退按钮而导致视图即将出现时,当在标签栏控制器中选择视图控制器的标签等时调用它。确保在实现中的某个时刻调用super.viewWillAppear()。你可以用这个方法刷新你的 UI
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Reload the UI
}
【讨论】:
更好的方法是使用协议
例子
在 GoToCart 中:在下面编写代码..
protocol GoCartControllerDelegate
{
func childViewControllerResponse(parameter)
}
class GoToCart:UIViewController
{
var delegate: ChildViewControllerDelegate?
....
}
然后在mainViewController中实现protocol函数end扩展到protocol
class MainViewController:UIViewController,GoCartControllerDelegate
{
// Define Delegate Method
func childViewControllerResponse(parameter)
{
//...here update what you want to update according to the situation
}
}
2 重要的事情
当像这样导航到 gocart 控制器代码时
let GTC = self.storyboard?.instantiateViewController(withIdentifier: "GoToCart")as! GoToCart
GTC.delegate = self
self.navigationController?.pushViewController(GTC, animated: true)
当从 gocartViewController 弹出时 像这样的代码
self.navigationController?.popViewController(animated:true)
self.delegate?.childViewControllerResponse(parameter)
【讨论】: