最近遇到一个问题,需要设置导航栏的BackBarButtomItem,以前偷懒直接隐藏了BackBarButtomItem,然后设置LeftBarButtonItem,这次想用BackBarButtomItem直接修改,方法如下:
UIBarButtonItem* backItem = [[UIBarButtonItem alloc]initWithTitle:@"HOME" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backItem;
然后,就没有然后了,一点作用都没有:

如图所示
踩坑以后,恰好时间富裕,所以就不断的找原因,最后才明白,这个坑其实是一个理解误区:
我们习惯性的在ViewController 2中设置backBarButtonItem,这样是不起作用的,因为backBarButtonItem和LeftBarButtonItem或者RightBarButtonItem不一样,后两者是设置本级页面上的navigationItem,而前者是设置子级页面上的navigationItem,所以从ViewController 1上push到ViewController 2的情况下,我们需要在ViewController 1的相关生命周期方法里面去设置backBarButtonItem。

效果如图
这样
backBarButtonItem的设置就生效了。值得一提的是:
self.navigationItem.backBarButtonItem = backItem; //生效
和
self.navigationController.navigationItem.backBarButtonItem = backItem; //不生效
原因嘛,也是和层级有关。
PS:
UIBarButtonItem* backItem = [[UIBarButtonItem alloc]initWithTitle:@"HOME" style:UIBarButtonItemStylePlain target:nil action:nil];
估计有朋友留意到了,target和action都赋值为nil,因为我们是使用设置backBarButtonItem的方式,所以pop的操作,会由系统为我们执行,不需要操心,即使写了,也是不起作用的。