最近遇到一個(gè)問題慨菱,需要設(shè)置導(dǎo)航欄的BackBarButtomItem
笙各,以前偷懶直接隱藏了BackBarButtomItem
,然后設(shè)置LeftBarButtonItem
惋嚎,這次想用BackBarButtomItem
直接修改痰滋,方法如下:
UIBarButtonItem* backItem = [[UIBarButtonItem alloc]initWithTitle:@"HOME" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backItem;
然后摘能,就沒有然后了,一點(diǎn)作用都沒有:
如圖所示
踩坑以后敲街,恰好時(shí)間富裕团搞,所以就不斷的找原因,最后才明白多艇,這個(gè)坑其實(shí)是一個(gè)理解誤區(qū):
我們習(xí)慣性的在ViewController 2
中設(shè)置backBarButtonItem
逻恐,這樣是不起作用的,因?yàn)?code>backBarButtonItem和LeftBarButtonItem
或者RightBarButtonItem
不一樣峻黍,后兩者是設(shè)置本級(jí)頁面上的navigationItem
复隆,而前者是設(shè)置子級(jí)頁面上的navigationItem
,所以從ViewController 1
上push到ViewController 2
的情況下姆涩,我們需要在ViewController 1
的相關(guān)生命周期方法里面去設(shè)置backBarButtonItem
挽拂。
效果如圖
這樣
backBarButtonItem
的設(shè)置就生效了。值得一提的是:
self.navigationItem.backBarButtonItem = backItem; //生效
和
self.navigationController.navigationItem.backBarButtonItem = backItem; //不生效
原因嘛骨饿,也是和層級(jí)有關(guān)亏栈。
PS:
UIBarButtonItem* backItem = [[UIBarButtonItem alloc]initWithTitle:@"HOME" style:UIBarButtonItemStylePlain target:nil action:nil];
估計(jì)有朋友留意到了台腥,target
和action
都賦值為nil
,因?yàn)槲覀兪鞘褂迷O(shè)置backBarButtonItem
的方式绒北,所以pop
的操作黎侈,會(huì)由系統(tǒng)為我們執(zhí)行,不需要操心闷游,即使寫了峻汉,也是不起作用的。