今天閑來無事來聊一聊這個反復(fù)刷新我開發(fā)觀的屬性——hidesBottomBarWhenPushed。
在開發(fā)的過程中總會遇到有些頁面有tabbar,而有些頁面沒有。比如:


那么有tabbar的頁面去往沒有的頁面就需要調(diào)用屬性self.hidesBottomBarWhenPushed=YES;
可是,這個屬性并不是這么簡單就可以的。你push過去了回來還需要有tabbar。這個時候又怎么辦呢?好的,我上網(wǎng)查了一下,于是有了第一種方法。
方法1.
self.hidesBottomBarWhenPushed=YES;
[self.navigationController pushViewController:[WebViewController new]animated:YES];
self.hidesBottomBarWhenPushed=NO;
我親身測試成功,這樣確實可以而且用了好長時間,到后來項目快結(jié)束的時候我發(fā)現(xiàn)很多地方都有這樣的話對于優(yōu)化代碼來說實在太麻煩。我就想沒有什么更好的解決辦法了嗎?于是我又上網(wǎng)搜了一下。于是,就有了下面這樣的改進:
方法2.
WebViewController *VC = [WebViewController new];
VC.hidesBottomBarWhenPushed=YES;
[self.navigationController pushViewController:VC animated:YES];
這樣寫之后,可以保證hidesBottomBarWhenPushed的屬性有每一個控制器單獨管理,相對來說更加清晰一些??墒俏铱偸歉杏X有些怪怪的。難道每次push的時候都要這樣寫嗎?于是我不死心,繼續(xù)上網(wǎng)搜查有沒有更好的解決辦法,終于我發(fā)現(xiàn)了一個簡直就是對我的項目量身定做的一個方法:
方法3.
在每一個視圖控制器內(nèi)的方法做如下操作:
- (void)viewDidAppear:(BOOL)animated {
[superviewDidAppear:animated];
self.hidesBottomBarWhenPushed=YES;
}
在需要顯示tabbar的視圖控制器中做這樣的操作:
- (void)viewDidDisappear:(BOOL)animated {
[superviewDidDisappear:animated];
self.hidesBottomBarWhenPushed=NO;
}
這樣就完全把hidesBottomBarWhenPushed的屬性交給每一個視圖控制器管理了??墒怯腥艘獑柫耍@樣不是比之前兩個方法更麻煩嗎?這里就要說為什么這個方法是量身定做的了。
因為我的所有視圖控制器都繼承于一個自定義的JPTViewController。所以我在這里面實現(xiàn)
- (void)viewDidAppear:(BOOL)animated {
[superviewDidAppear:animated];
self.hidesBottomBarWhenPushed=YES;
}
的方法其他所有視圖控制器都能夠?qū)崿F(xiàn)這樣的功能。而我只在“首頁”“產(chǎn)品”“我的”“更多”這四個需要顯示tabbar的頁面實現(xiàn)
- (void)viewDidDisappear:(BOOL)animated {
[superviewDidDisappear:animated];
self.hidesBottomBarWhenPushed=NO;
}
方法就可以了。
這就是為什么這個方法對我來說是量身定做了。
我也不知道有沒有其他的方法,總之這里只是總結(jié)一下我使用這個屬性的心得。
如果有其他更好的方法,希望大神賜教。