变量不会在UITabBarControllerDelegate

时间:2018-07-07 16:35:40

标签: ios swift xcode uitabbarcontroller uitabbaritem

这就是我想要做的:

Menu view Compressors view

当用户单击“压缩机”按钮时,它将显示一个滚动视图,其中包含压缩机(或其他内容)的详细信息。然后返回菜单,用户单击“更多”标签栏项。

如果用户是第一次点击“更多”项目,我已经设置了一个变量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
}

}

然后我在其他文件中有Tab栏委托:

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.scrollView.isHidden = true,因为它会检测到first = true,但事实并非如此!它设置为false(应该是),但是我仍然在那里。true。我认为我需要做的是以某种方式更新myTabBarController,但我不知道如何更新。

请帮忙,任何关于正在发生的事情的提示将不胜感激! 另外,感谢您阅读本文,希望您理解我的问题。

从我身边编辑

通过在我的应用程序中使用导航控制器(我最终还是这样做了),可以更自然地解决此问题。乔的回答是正确的,但是如果有人遇到与我相同的问题,那还有第二种方法。

1 个答案:

答案 0 :(得分:1)

由于您正在更新新创建的MoreVC上的布尔值,因此现有的布尔值完全不变。

代替:

if selectedViewController is MoreVC

将其更新为:

if let more = selectedViewController as? MoreVC

然后摆脱创建全新的MoreVC的代码行。