亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

父子控制器中的自定義導航欄

2019-11-14 19:32:21
字體:
來源:轉載
供稿:網友

提到自定義導航欄,大家首先想到的就是自己寫個自定義導航控制器,然后設置自己的導航控制器的主題。再把包裝著自己控制器的導航控制器的class填上自己寫的自定義nav如果遇到個別控制器的導航欄想與眾不同,就再寫個自定義nav然后再弄個新的導航控制器包裹自己。

 

可是,如果一個項目中用到了 父子控制器,上面的這種做法就會沒有效果。原因就是取不到導航欄。

比如我做的大概架構是一個collectionView的循環引用,讓一個個tableview都是包裝在我的collectionViewcell里面的,然后里面的的tableview的cell點擊之后會push一個新的界面。這時候不管你把這個push的新界面怎么設置導航欄樣式 在程序中都是看不見的,因為只能看到最上層,就是collectionViewController的導航欄。

(這里暫時就沒截圖了,因為好多種結果,截太麻煩了,相信大家能理解文字的意思)

而且就算設置導航欄的主題大家也都知道,這段代碼也都是寫在首次調用本類時方法里

+ (void)initialize{    // 設置導航欄的主題    UINavigationBar *navBar = [UINavigationBar appearance];    [navBar setBarTintColor:[UIColor redColor]];}

 

 

 

之后再想在動態修改,導航欄的背景色或是背景圖片都是改不了了,只有在一加載時就寫好。我曾試過在push出新的控制器和pop彈棧之后發出通知在這里更改樣式,但是都是無效的,改不了。

 

 

 

 

 

如圖,這個里面控制器是兩個scrollView,一個是標題欄scrollView,一個是下面的內容也是一個scrollView。 (之所以用scrollview是為了每個頁面懶加載,性能更好),然后在scrollView中嵌套了一個個tableViewController。 是把tableViewController的view加到 scrollView的subViews里。

scrollView是主控制器view的subView 那這個tableViewController的view就是主控制器的 subView的subView。

這里要說一下關于父子控制器的注意點就是:如果把A的view加到了B的view的subViews里 那這個A的控制器也必須加到這個B的控制器的childControllers里。

不然view過去了控制器卻沒有 他不就是沒人管了?

上面這個效果 主要用到了一個方法就是導航欄的隱藏方法

當然在設置界面的時候,上面的箭頭和跟帖都是要自己自定義的一個普通的view不是導航欄,可以把他當作導航欄來使用。(董鉑然博客園原創)點擊返回會把棧頂控制器彈棧,點擊跟帖會再push一個評論控制器。

然后再這個詳情控制器將要顯示時把導航欄隱藏,再在這個詳情頁將要彈棧時設置導航欄顯示就好。

- (void)viewWillAppear:(BOOL)animated{    [self.navigationController setNavigationBarHidden:YES animated:YES];}
- (IBAction)backBtnClick:(id)sender {    [self.navigationController popViewControllerAnimated:YES];    [self.navigationController setNavigationBarHidden:NO animated:YES];}

 

這里還有個注意點就是 要把導航欄隱藏寫在合適的方法里,如果寫在將要跳轉的方法PRepareForSegue里就會有抽搐的bug

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{    if ([segue.destinationViewController isKindOfClass:[SXDetailController class]]) {                NSInteger x = self.tableView.indexPathForSelectedRow.row;        SXDetailController *dc = segue.destinationViewController;        dc.newsModel = self.arrayList[x];        [self.navigationController setNavigationBarHidden:YES animated:YES];    }else{        NSInteger x = self.tableView.indexPathForSelectedRow.row;        SXPhotoSetController *pc = segue.destinationViewController;        pc.newsModel = self.arrayList[x];        [self.navigationController setNavigationBarHidden:YES animated:YES];    }    }

 

如圖這個是反面教材,仔細看導航欄有個抽搐的bug

 

 

 

 

有的人可能會嘗試干脆直接不用導航控制器了 自己設置按鈕控制push和pop

但是這樣系統是不允許的 會報錯,報錯的大概意思就是 你不能給一個沒有導航控制器的控制器添加push操作。

我上面用的方法是雖然把導航控制器隱藏了,但他的功能還在。

 

隱藏導航欄非常好用,可是會遇到一個問題,就是隱藏了導航欄之后,push出的界面無法向左滑動返回。

這個問題類似于: 在導航欄的左上角自定義了一個返回按鈕把原本的返回按鈕給覆蓋了。導致無法實現滑動返回

解決方案是這樣,再將控制器push的代碼之后 或者在prepareForSegue 方法里面加上這行代碼

 if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {            self.navigationController.interactivePopGestureRecognizer.delegate = nil;        }

 

因為你覆蓋了系統的返回按鈕,(董鉑然博客園原創)系統將會通過代理禁用這個滑動返回功能,你提前把代理給踢了,這樣滑動返回功能就能報住了。

為了安全起見 最好把主控制器的即將顯示加上這行代碼

- (void)viewWillAppear:(BOOL)animated{    [self.navigationController setNavigationBarHidden:NO animated:YES];}

 

如果不加這行代碼 可能你一push再拉回來導航欄還是隱藏著的。因為剛才我們只在返回按鈕觸發時設置了導航欄顯示對吧。

最終效果可以達到這樣如圖

 

哪里覺得不對勁或者哪里覺得看不懂 歡迎與我交流 歡迎關注我


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲va欧美va在线观看| 欧美大片在线免费观看| 国产精品国产三级国产aⅴ浪潮| www.亚洲男人天堂| 亚洲人成网站999久久久综合| 色妞一区二区三区| 美女999久久久精品视频| 亚洲性69xxxbbb| 亚洲国产精品字幕| 亚洲第一网中文字幕| 精品久久久久久亚洲精品| 欧美黄色免费网站| 久久久精品一区二区三区| 91中文精品字幕在线视频| 91免费国产网站| 久久久久久香蕉网| 久久精品欧美视频| 91产国在线观看动作片喷水| 欧美激情国产高清| 夜夜嗨av一区二区三区免费区| 欧美电影《睫毛膏》| 精品国产区一区二区三区在线观看| 亚洲新声在线观看| 亚洲福利在线看| 国产亚洲一区精品| 国产日韩在线看| 欧美黑人巨大精品一区二区| 色婷婷综合久久久久中文字幕1| 欧美性猛交xxxx黑人| 91免费视频网站| 草民午夜欧美限制a级福利片| 最近日韩中文字幕中文| 欧美美最猛性xxxxxx| 97色在线播放视频| 国产精品白嫩美女在线观看| 精品丝袜一区二区三区| 国产精品久久久久aaaa九色| 欧美极品美女电影一区| 欧美激情小视频| 777午夜精品福利在线观看| 国产午夜精品视频免费不卡69堂| 国产福利视频一区| 亚洲性视频网站| 国产成人精品视| 久久久久久久爱| 亚洲视频在线观看视频| 亚洲精品资源美女情侣酒店| 国产精品福利无圣光在线一区| 国产成人一区二区三区| 国产精品对白刺激| 琪琪亚洲精品午夜在线| 4444欧美成人kkkk| 国产欧美va欧美va香蕉在线| 最近2019中文字幕大全第二页| 亚洲一区精品电影| 亚洲国产精久久久久久| 久热精品视频在线观看| 日韩av电影手机在线| 九九热99久久久国产盗摄| 欧美自拍视频在线| 狠狠色香婷婷久久亚洲精品| 欧美午夜精品久久久久久浪潮| 一区二区三区黄色| 亚洲成av人乱码色午夜| 亚洲国产精品久久久久久| 欧美日韩高清在线观看| 国产精品久久久久久久电影| 欧美日韩性视频| 亚洲国产精品久久精品怡红院| 日韩欧美成人免费视频| 美日韩精品免费观看视频| 国产69久久精品成人看| 91av视频导航| 日韩av电影免费观看高清| 日韩欧美高清视频| 5278欧美一区二区三区| 国模精品视频一区二区三区| 黑人精品xxx一区一二区| 久久久久久久久久久91| 国外色69视频在线观看| 青青久久av北条麻妃海外网| 欧美日韩国产在线| 国产精品入口免费视频一| 国产精品xxxxx| 92福利视频午夜1000合集在线观看| www国产精品视频| 777国产偷窥盗摄精品视频| 日韩经典中文字幕在线观看| 日韩欧美亚洲范冰冰与中字| 国产亚洲视频中文字幕视频| 在线精品高清中文字幕| 国产精品91在线| www.日本久久久久com.| 欧美日韩精品在线视频| 精品国产欧美一区二区五十路| 精品一区二区三区三区| 久久天堂电影网| 亚洲国产精品电影在线观看| 国产精品视频一区国模私拍| 国产成人精品电影久久久| 在线播放国产一区二区三区| 九九久久国产精品| 日韩免费在线视频| 国产精品视频久久久久| 日韩精品在线免费观看| 精品久久久久久久久久ntr影视| 97在线视频免费| 国产va免费精品高清在线观看| 欧美另类在线观看| 热久久美女精品天天吊色| 成人黄色av播放免费| 午夜精品一区二区三区在线播放| 久久久久久亚洲| 91免费欧美精品| 国产在线观看精品一区二区三区| 亚洲午夜av久久乱码| 久久频这里精品99香蕉| 亚洲国产精品视频在线观看| 亚洲国产欧美久久| 中文字幕国产精品| 国外成人性视频| 91成品人片a无限观看| 美女福利视频一区| 97视频在线观看免费| 91高清免费视频| 欧美在线一区二区三区四| 欧美成人合集magnet| 日韩免费视频在线观看| 欧美成人一区二区三区电影| 日韩av在线网| 欧美激情一二区| 国产欧美日韩中文字幕在线| 色偷偷噜噜噜亚洲男人| 欧美wwwwww| 亚洲人成网7777777国产| 国产成人精品综合久久久| 欧美午夜精品久久久久久浪潮| 精品电影在线观看| 国产视频精品xxxx| 清纯唯美亚洲综合| 另类美女黄大片| 久久久久久久久久久亚洲| 97久久国产精品| 久久久久久久激情视频| 精品免费在线视频| 国产精品∨欧美精品v日韩精品| 国产69精品久久久久9| 97视频免费在线看| 日韩电影免费观看中文字幕| 亚洲开心激情网| 国产精品黄色av| 疯狂欧美牲乱大交777| 国产日韩av在线| 日韩欧美视频一区二区三区| 91免费在线视频| 国产精品高潮呻吟久久av野狼| 日韩亚洲第一页| 午夜免费在线观看精品视频| 欧美激情亚洲一区| 亚洲欧洲在线观看| 欧美大片免费看| 在线精品高清中文字幕| 国产日韩欧美夫妻视频在线观看| 欧美乱大交xxxxx另类电影|