我有一个用户打开应用程序 (VC1) 时使用的通用 View 。使用选项卡栏 Controller ,我加载了另一个 View (VC2),可用于更新前一个 View 中可见的数据。当我返回 VC1(堆栈)时,它不会重新加载更新的数据。
我试过像这样在 viewWillAppear 中调用 viewDidLoad...
override func viewWillAppear(_ animated: Bool) {
viewDidLoad()
}
它可以工作,但它会加载仍在堆栈上的 VC1,并且用户可以看到更改(不好)。
我想关闭 VC1 会有所帮助,但我还没有找到如何在使用标签栏 Controller 时关闭 View 。
最佳答案
每次您的 View 出现时,请按照以下步骤处理您的 View 加载设置:
(VC1 = 第一个 View Controller )
- 在您的 VC1 中创建一个新的函数/方法(名为
viewLoadSetup
)并将所有代码从viewDidLoad()
移动到viewLoadSetup()
。 现在,从
调用viewWillAppear
viewLoadSetup()
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 } }
如果你想从 viewDidLoad
调用 viewLoadSetup
一次,当你的 View Controller 加载时,然后在每次从你的 viewWillAppear
调用之后,
class VC1: UIViewController {
var isLoadingViewController = false
override func viewDidLoad() {
super.viewDidLoad()
isLoadingViewController = true
viewLoadSetup()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if isLoadingViewController {
isLoadingViewController = false
} else {
viewLoadSetup()
}
}
func viewLoadSetup(){
// setup view did load here
}
}
关于ios - 使用标签栏从另一个 View 返回时如何重新加载 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46577217/