我有一个用户打开应用程序(VC1)时使用的常用视图。使用标签栏控制器,我加载另一个视图(VC2),可用于更新前一个可见的数据。当我返回VC1(它是堆栈)时,它不会重新加载更新的数据。
我试图在viewWillAppear中调用viewDidLoad,就像这样......
override func viewWillAppear(_ animated: Bool) {
viewDidLoad()
}
它可以工作,但它仍然在堆栈上加载VC1,用户可以看到更改(不好)。
我认为解雇VC1会有所帮助,但我还没有找到使用标签栏控制器时如何解除视图。
答案 0 :(得分:5)
每次出现视图时,请按照以下步骤操作以查看加载设置:
(VC1 =第一视图控制器)
testguid
),并将所有代码从viewLoadSetup
移至viewDidLoad()
。现在,从viewLoadSetup()
viewLoadSetup()
viewWillAppear
如果您想要class VC1: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// viewLoadSetup() you may call it from view did load also
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
viewLoadSetup()
}
func viewLoadSetup(){
// setup view did load here
}
}
来自viewLoadSetup
一次,加载视图控制器,然后每次从viewDidLoad
开始,
viewWillAppear
答案 1 :(得分:1)
您可以使用VC2中的块来回调VC1以重新加载某些内容 第一个,在VC2中,声明一个块:
class View2Controller: UIViewController {
public var completionHandler:(()->Void)?
//...
}
第二次,在返回之前在VC2中进行回调:
self.completionHandler?()
终于,在VC1中,您可以回叫重新加载:
let vc2 = View2Controller()
vc2.completionHandler = { [weak self] () -> Void in
//call reloading method like: self?.reloadData()
}