最近遇到一个问题,需要设置导航栏的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
的操作,会由系统为我们执行,不需要操心,即使写了,也是不起作用的。