今天闲来无事来聊一聊这个反复刷新我开发观的属性——hidesBottomBarWhenPushed。
在开发的过程中总会遇到有些页面有tabbar,而有些页面没有。比如:
那么有tabbar的页面去往没有的页面就需要调用属性self.hidesBottomBarWhenPushed=YES;
可是,这个属性并不是这么简单就可以的。你push过去了回来还需要有tabbar。这个时候又怎么办呢?好的,我上网查了一下,于是有了第一种方法。
方法1.
self.hidesBottomBarWhenPushed=YES;
[self.navigationController pushViewController:[WebViewController new]animated:YES];
self.hidesBottomBarWhenPushed=NO;
我亲身测试成功,这样确实可以而且用了好长时间,到后来项目快结束的时候我发现很多地方都有这样的话对于优化代码来说实在太麻烦。我就想没有什么更好的解决办法了吗?于是我又上网搜了一下。于是,就有了下面这样的改进:
方法2.
WebViewController *VC = [WebViewController new];
VC.hidesBottomBarWhenPushed=YES;
[self.navigationController pushViewController:VC animated:YES];
这样写之后,可以保证hidesBottomBarWhenPushed的属性有每一个控制器单独管理,相对来说更加清晰一些。可是我总是感觉有些怪怪的。难道每次push的时候都要这样写吗?于是我不死心,继续上网搜查有没有更好的解决办法,终于我发现了一个简直就是对我的项目量身定做的一个方法:
方法3.
在每一个视图控制器内的方法做如下操作:
- (void)viewDidAppear:(BOOL)animated {
[superviewDidAppear:animated];
self.hidesBottomBarWhenPushed=YES;
}
在需要显示tabbar的视图控制器中做这样的操作:
- (void)viewDidDisappear:(BOOL)animated {
[superviewDidDisappear:animated];
self.hidesBottomBarWhenPushed=NO;
}
这样就完全把hidesBottomBarWhenPushed的属性交给每一个视图控制器管理了。可是有人要问了,这样不是比之前两个方法更麻烦吗?这里就要说为什么这个方法是量身定做的了。
因为我的所有视图控制器都继承于一个自定义的JPTViewController。所以我在这里面实现
- (void)viewDidAppear:(BOOL)animated {
[superviewDidAppear:animated];
self.hidesBottomBarWhenPushed=YES;
}
的方法其他所有视图控制器都能够实现这样的功能。而我只在“首页”“产品”“我的”“更多”这四个需要显示tabbar的页面实现
- (void)viewDidDisappear:(BOOL)animated {
[superviewDidDisappear:animated];
self.hidesBottomBarWhenPushed=NO;
}
方法就可以了。
这就是为什么这个方法对我来说是量身定做了。
我也不知道有没有其他的方法,总之这里只是总结一下我使用这个属性的心得。
如果有其他更好的方法,希望大神赐教。
网友评论