关于设置UINavigationItem的BackBarButtomItem的坑

最近遇到一个问题,需要设置导航栏的BackBarButtomItem,以前偷懒直接隐藏了BackBarButtomItem,然后设置LeftBarButtonItem,这次想用BackBarButtomItem直接修改,方法如下:

UIBarButtonItem* backItem = [[UIBarButtonItem alloc]initWithTitle:@"HOME" style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backItem;

然后,就没有然后了,一点作用都没有:

如图所示

踩坑以后,恰好时间富裕,所以就不断的找原因,最后才明白,这个坑其实是一个理解误区:
我们习惯性的在ViewController 2中设置backBarButtonItem,这样是不起作用的,因为backBarButtonItemLeftBarButtonItem或者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];

估计有朋友留意到了,targetaction都赋值为nil,因为我们是使用设置backBarButtonItem的方式,所以pop的操作,会由系统为我们执行,不需要操心,即使写了,也是不起作用的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容