在我的应用程序中包含五个不同的选项卡。当我在标签之间切换时,一次又一次地自动调用布尔变量的初始化。 当我在声明/初始化变量上放置一个断点时,它将自动被调用。这将导致我的布尔变量值更改为 true 。请仔细阅读以下代码 如何解决此问题。请帮帮我
class HomeViewController: BaseViewController {
var isEnabled: Bool = true
}
override func viewWillAppear(_ animated: Bool) {
isEnabled = true
}
override func viewWillDisappear(_ animated: Bool) {
isEnabled = false
}
答案 0 :(得分:1)
您正在使用应用的标签视图。当您从一个选项卡切换到其他选项卡viewWillAppear
并且您的布尔变量isEnabled
设置为true
时,当移动到新选项卡时,它会调用viewWillDisappear
并设置为false。如果您不想更改isEnabled
变量,请从viewWillAppear
和viewWillDisappear
移除,然后不会更改值。您将获得分配给变量的最后一个值。
viewDidLoad
方法只会调用一次viewController
的生命周期,即viewController
对象首次加载到内存中。每当一个视图出现在屏幕上时你会调用viewWillAppear
方法,或者你可以说是topViewController ......
说明:与
viewController1
和tab2
相关联的Tab1与viewController2
相关联。现在,当您运行应用程序时,您会看到选项卡1已被选中且viewController1
正在查看中,并且您希望更改为tab2
,此时您将点按tab2
然后{{1对象将首次创建并加载到内存,因此其tabVieController2's
方法将调用,不久之后它将显示在窗口中,viewDidLoad
也将调用。现在,如果您尝试通过单击它们来更改标签,则只会调用viewWillAppear
方法,因为它们已经在内存中。