生命周期:何时隐藏并在UIViewController中显示标签栏

时间:2014-07-23 20:42:10

标签: ios objective-c uiviewcontroller lifecycle

隐藏我的标签栏

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.tabBarController.tabBar.hidden=YES;
}

很明显再次展示,我需要做的就是打电话

self.tabBarController.tabBar.hidden=NO;

但是我应该在哪个生命周期方法中进行此调用?在最新的iOS / Xcode中,哪些生命周期方法仍然有效,似乎存在分歧。另外,作为音响工程的问题,我想知道正确的答案:viewDidDisappearViewDidUnloadViewDidDispose

3 个答案:

答案 0 :(得分:4)

根据您想要实现的目标,在许多用例中有一个更优雅的解决方案:

<强>故事板:

转到要推送的视图控制器。

选中“在推送时隐藏底栏”

<强>编程:

在推送的viewController中:

override var hidesBottomBarWhenPushed: Bool {
    get {
        return true
    }
    set {
        super.hidesBottomBarWhenPushed = newValue
    }
}

答案 1 :(得分:1)

从apple doc回答你的问题

  

viewDidUnload [...]在iOS 6.0中已弃用。视图不再被清除   在低内存条件下,因此永远不会调用此方法。

因此在iOS 6.0中不推荐使用viewDidUnloadself.tabBarController.tabBar.hidden=NO;放置viewDidDisappear的最佳位置是viewDidDisappear,但是当视图从屏幕中删除而不是从内存中调用viewDidLoad时它可以调用如果视图再次显示,它将不会调用tabbar,因此在这种情况下,self.tabBarController.tabBar.hidden=YES;将保持不被隐藏并解决您需要做两件事。 将viewWillAppear放入viewWillLoad而不是- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.tabBarController.tabBar.hidden=YES; }

viewDidDisappear

并将tabbar的隐藏调用置于- (void)viewWillDisappear:(BOOL)animated { [super viewDidDisappear:animated]; self.tabBarController.tabBar.hidden=NO; }

viewWill/DidAppear

它会管理所有案例,而其他地方也无法安排此次调用。在某些情况下,您应始终使用viewDid/WillDisappearviewWillLoad以及{{1}},因为它们是安全的如果没有不确定的条件(崩溃等),总是打电话。

答案 2 :(得分:0)

你想要实现的目标并不是很清楚,但这取决于你何时希望隐藏它。另外,要取消隐藏,您应该使用self.tabBarController.tabBar.hidden=NO;(请注意NO而不是YES)。

如果我猜到你想要达到的效果,我会告诉你在viewWillDisappearviewDidDisappear中实现它。