Ios 生命周期:何时在UIViewController中隐藏和显示选项卡栏
要隐藏我的选项卡栏,我需要Ios 生命周期:何时在UIViewController中隐藏和显示选项卡栏,ios,objective-c,uiviewcontroller,lifecycle,Ios,Objective C,Uiviewcontroller,Lifecycle,要隐藏我的选项卡栏,我需要 - (void)viewDidLoad { [super viewDidLoad]; self.tabBarController.tabBar.hidden=YES; } 很明显,为了让它再次出现,我需要做的就是打电话 self.tabBarController.tabBar.hidden=NO; 但我应该在哪个生命周期方法中进行此调用?对于在最新的iOS/Xcode中哪些生命周期方法仍然有效,似乎存在分歧。另外,作为一个声音工程的问题,我想知道一
- (void)viewDidLoad
{
[super viewDidLoad];
self.tabBarController.tabBar.hidden=YES;
}
很明显,为了让它再次出现,我需要做的就是打电话
self.tabBarController.tabBar.hidden=NO;
但我应该在哪个生命周期方法中进行此调用?对于在最新的iOS/Xcode中哪些生命周期方法仍然有效,似乎存在分歧。另外,作为一个声音工程的问题,我想知道一个非常正确的答案:
ViewDidEnglish
或ViewDidUnload
或ViewDidDispose
?来回答您在apple doc上的问题
iOS 6.0中不推荐使用viewDidUnload[…]。视图不再被清除
在内存不足的情况下,因此永远不会调用此方法
因此,iOS 6.0中不推荐使用viewDidUnload
,最好放置self.tabBarController.tabBar.hidden=NO代码>在viewdiddemouse
中,但当视图从屏幕中删除而不是从内存中删除时,它可以调用viewdiddemouse
。因此,如果视图再次出现,它将不会调用viewDidLoad
,因此在这种情况下,tabbar
将保持未隐藏状态,并且要解决这一问题,您需要做两件事。
Putself.tabBarController.tabBar.hidden=YESview中的code>将出现
,而不是viewWillLoad
和
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.tabBarController.tabBar.hidden=YES;
}
并将未隐藏的tabbar调用放到viewdiddemouse
- (void)viewWillDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
self.tabBarController.tabBar.hidden=NO;
}
它将管理所有情况,其他地方不安全,无法拨打此电话。您应始终使用viewWill/didebeen
和viewDid/willdefine
以及viewWillLoad
,在某些情况下,它们是安全的,并且在没有不确定的情况(崩溃等)时始终呼叫.你想要达到什么目的还不是很清楚,但这取决于你想什么时候把它隐藏起来。另外,要取消隐藏它,应该使用self.tabBarController.tabBar.hidden=NO代码>(注意NO
而不是YES
)
如果我猜到您想要达到的效果,我会告诉您在视图中实现它将消失
或视图消失
根据您想要达到的效果,有一个更优雅的解决方案适用于许多用例:
情节提要:
转到要推送的视图控制器
选中“按下时隐藏底部栏”
以编程方式:
在推送的viewController中:
override var hidesBottomBarWhenPushed: Bool {
get {
return true
}
set {
super.hidesBottomBarWhenPushed = newValue
}
}
我必须再次显示选项卡的原因是,一旦一个ViewController调用self.tabBarController.tabBar.hidden=YES代码>,视图将永远隐藏。因此,我没有遍历每个视图控制器来显示它,而是让控制器负责隐藏它,以便在它离开屏幕时将其显示出来。ViewDidEvale没有修复它。酒吧永远都不存在了。(我刚刚复制并粘贴了您的代码)