在ViewController循环中隐藏/显示TabBar

时间:2016-05-17 13:05:10

标签: ios swift uitabbarcontroller

场合

我在ViewControllers中嵌入了一些NavigationBar(所有TabBarController)。我有一个特定的ViewController VC1 ),我不想显示TabBar。在那里,您可以转到另一个特定的ViewController VC2 ),其中TabBar需要再次显示。

我的解决方案

VC1

self.hidesBottomBarWhenPushed默认设置为true

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {      
    self.hidesBottomBarWhenPushed = false
}

override func viewWillDisappear(animated: Bool) {
    self.hidesBottomBarWhenPushed = true
}

VC2

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {      
    self.hidesBottomBarWhenPushed = true
}

override func viewWillDisappear(animated: Bool) {
    self.hidesBottomBarWhenPushed = false
}

到目前为止一切顺利。这似乎有效,但您可以从 VC2 (具有不同内容的相同控制器)推送另一个 VC1 ,当然还可以从<推送另一个 VC2 强> VC1 再次等等。

问题

  1. 只要 VC1 VC1 推送两次,TabBar就会始终隐藏。
  2. 当您点击后退按钮从 VC1 返回 VC2 时,TabBar始终处于隐藏状态。
  3. enter image description here

4 个答案:

答案 0 :(得分:2)

仅自定义VC1

public void printdt(DataTable dt) {
        int counter1 = 0;
        int counter2 = 0;
        string temp = "";
        foreach (DataRow dataRow in dt.Rows) {
            foreach (var item in dataRow.ItemArray) {
                temp += " ["+counter1+"]["+counter2+"]"+ item +", ";
                counter2++;
            }
            counter1++;
            logger.Debug(temp);
            temp = "";
            counter2 = 0;
        }
    }

这是更简单的架构

答案 1 :(得分:1)

不要将逻辑放在viewWillDisappearprepareForSegue中,因为您不知道即将呈现的视图控制器需要什么样的行为。将逻辑放在viewWillAppear内。

让每个ViewController处理自己想要的行为,不要试图预测目标需要什么。特别是因为您并不总是知道viewWillDisappearprepareForSegue的原因是什么 - 因此您无法做出相应的反应。

答案 2 :(得分:0)

尝试在所需的VC中更改属性:

self.navigationController.toolbarHidden = YES;

答案 3 :(得分:0)

在viewWillApear中尝试使用隐藏或取消隐藏的代码,它会正常工作。

对于VC1: - 在此您需要始终隐藏然后添加此代码

override func viewWillAppear(animated: Bool) {
 self.tabBarController?.tabBar.hidden = true
}

对于VC2: - 在此您需要始终显示然后添加此代码

override func viewWillAppear(animated: Bool) {
 self.tabBarController?.tabBar.hidden = false
}

enter image description here 试试这个代码,它的工作正常。我也在示例项目中尝试了这段代码。