UITabBarControllerDelegate 中的变量不更新
Variables don't update in UITabBarControllerDelegate
这是我正在尝试做的事情:
当用户单击 'Compressors' 按钮时,它会显示一个滚动视图,其中包含压缩机(或其他)的详细信息。要返回菜单,用户单击 'More' 选项卡栏项。
如果这是用户第一次点击 'More' 项目,我已经设置了一个变量 first
来存储信息。
class MoreVC: UIViewController {
var first : Bool = true
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.isHidden = true
}
open func hideEverything(_ bool : Bool)
{
print(bool)
if bool == true
{
// First time user taps More - nothing happens
return
}
print("hideEverything()")
}
@IBAction func compressorsButton(_ sender: Any) {
scrollView.isHidden = false
print(first)
}
override func viewDidAppear(_ animated: Bool) {
print("-> \(self.title!)")
first = false
}
override func viewDidDisappear(_ animated: Bool) {
scrollView.isHidden = true
first = true
}
}
然后我在不同的文件中有标签栏委托:
class myTabBarController: UITabBarController, UITabBarControllerDelegate
{
override func viewDidLoad() {
self.delegate = self
}
func tabBarController(_ tabBarController: UITabBarController, didSelect selectedViewController: UIViewController) {
if selectedViewController is MoreVC
{
let more = MoreVC()
print("more.first = \(more.first)")
if more.first == false
{
more.scrollView.isHidden = true
}
}
}
}
因此,当我点击压缩器按钮时,视图会显示,当我切换标签时,视图会隐藏。但是当 scrollView
启动并且我按下 'More' 时,它不会触发 more.scrollView.isHidden = true
,因为它检测到 first = true
,但事实并非如此!它设置为 false
(应该是),但我仍然在那里得到 true
。我想我需要做的是以某种方式更新 myTabBarController
,但我不知道如何更新。
请帮忙,任何关于正在发生的事情的提示都将不胜感激!
也感谢您阅读到这里,希望您能理解我的问题。
编辑来自未来的我:
通过我的应用程序使用导航控制器可以更自然地解决这个问题(我最终还是这样做了)。乔的回答是正确的,但如果有人遇到和我一样的问题,还有第二种方法。
由于您正在更新新创建的 MoreVC 上的布尔值,因此现有的根本不会改变。
而不是:
if selectedViewController is MoreVC
更新为:
if let more = selectedViewController as? MoreVC
然后删除创建全新 MoreVC 的行。
这是我正在尝试做的事情:
当用户单击 'Compressors' 按钮时,它会显示一个滚动视图,其中包含压缩机(或其他)的详细信息。要返回菜单,用户单击 'More' 选项卡栏项。
如果这是用户第一次点击 'More' 项目,我已经设置了一个变量 first
来存储信息。
class MoreVC: UIViewController {
var first : Bool = true
@IBOutlet weak var scrollView: UIScrollView!
override func viewDidLoad() {
super.viewDidLoad()
scrollView.isHidden = true
}
open func hideEverything(_ bool : Bool)
{
print(bool)
if bool == true
{
// First time user taps More - nothing happens
return
}
print("hideEverything()")
}
@IBAction func compressorsButton(_ sender: Any) {
scrollView.isHidden = false
print(first)
}
override func viewDidAppear(_ animated: Bool) {
print("-> \(self.title!)")
first = false
}
override func viewDidDisappear(_ animated: Bool) {
scrollView.isHidden = true
first = true
}
}
然后我在不同的文件中有标签栏委托:
class myTabBarController: UITabBarController, UITabBarControllerDelegate
{
override func viewDidLoad() {
self.delegate = self
}
func tabBarController(_ tabBarController: UITabBarController, didSelect selectedViewController: UIViewController) {
if selectedViewController is MoreVC
{
let more = MoreVC()
print("more.first = \(more.first)")
if more.first == false
{
more.scrollView.isHidden = true
}
}
}
}
因此,当我点击压缩器按钮时,视图会显示,当我切换标签时,视图会隐藏。但是当 scrollView
启动并且我按下 'More' 时,它不会触发 more.scrollView.isHidden = true
,因为它检测到 first = true
,但事实并非如此!它设置为 false
(应该是),但我仍然在那里得到 true
。我想我需要做的是以某种方式更新 myTabBarController
,但我不知道如何更新。
请帮忙,任何关于正在发生的事情的提示都将不胜感激! 也感谢您阅读到这里,希望您能理解我的问题。
编辑来自未来的我:
通过我的应用程序使用导航控制器可以更自然地解决这个问题(我最终还是这样做了)。乔的回答是正确的,但如果有人遇到和我一样的问题,还有第二种方法。
由于您正在更新新创建的 MoreVC 上的布尔值,因此现有的根本不会改变。
而不是:
if selectedViewController is MoreVC
更新为:
if let more = selectedViewController as? MoreVC
然后删除创建全新 MoreVC 的行。