对UIBackBarButtonItem的理解
来源:互联网 发布:工程造价在国企知乎 编辑:程序博客网 时间:2024/04/28 07:51
UIBackBarButtonItem(返回按钮)是由全局UINavigationController控制生成的(设置在当前视图控制器的UINavigationItem中),生成的时机为当前视图控制器已压入UINavigationController栈中、尚未初始化时。(参考自:http://stackoverflow.com/questions/6933280/why-is-self-navigationitem-backbarbuttonitem-always-nil:
Make sure you only try to read backBarButtonItem etc after viewDidAppear.. in viewWillAppear/viewDidLoad/init.. the navigation controller won't
have set up the back button yet, because the view hasn't fully been pushed onto the navigation stack. – darvids0n Aug 4 '11 at 3:40)
当UIBackBarButtonItem尚未在上一个视图控制器中定义,则当前的返回按钮为空对象,此时UINavigationController设置当前返回按钮的标题(UIBackBarButtonItem.title)=上一个ViewController的标题值。假如上一个ViewController的标题值不存在,则当前UIBackBarButtonItem的标题值为“Back”
-----------------------------------------------------------------------------------
从上一个控制器A出栈到当前控制器B压栈过程中发生的事情,按顺序可列为(注意忽略了一些与主题不相关的细节):
①当前控制器A调用[self.navigationController pushViewController:nextViewController animated:YES];
②当前控制器A出栈;
③控制器B入栈;
->④全局的UINavigationController对控制器B的返回按钮进行设置;(控制器包含的视图View尚未显示)
⑤显示控制器B对应的视图View;
注意上面所说“全局的UINavigationController对控制器B的返回按钮进行设置”,不是设置控制器B的navigationItem.backBarButtonItem属性,而是设置当前控制器本身的返回按钮!
默认情况下,在当前视图控制器调用self.navigationItem.backBarButtonItem=nil ,除非你手动实例化它。(请记住它代表的是下一个视图的返回按钮,而不是当前的)
系统不允许开发者获取当前视图控制器所显示的返回按钮UIBackBarButtonItem
-----------------------------------------------------------------------------------
无论当前视图控制器ViewController是否为根ViewController,每个ViewController的self.navigationItem.backBarButtonItem默认为nil(除非我们亲自去给它赋值),所以不可能在当前的ViewController中通过如下代码来设置下一个页面的返回按钮主题:
[self.navigationItem.backBarButtonItem setTitle:@"..."]
只能先新建一个UIBarButtonItem,并让backBarButtonItem指向它:
UIBarButtonItem* back=[[UIBarButtonItem alloc]initWithTitle:@"AAA" style:UIBarButtonItemStyleBordered target:nil action:nil];self.navigationItem.backBarButtonItem=back;
推荐一篇文章(内容正确性本人未检验):如何设置backBarButtonItem的title和action
- 对UIBackBarButtonItem的理解
- 对博客的理解
- 对动力的理解
- 对类的理解
- 对package的理解
- 对IRP的理解
- 对接口的理解
- 对String的理解
- 对https的理解
- 对SPRING的理解
- 对HTML的理解
- 对接口的理解
- 对接口的理解
- 对接口的理解
- 对接口的理解
- 对委托的理解
- 对delegate的理解
- 对select的理解
- Python 获取新浪财经数据的案例
- 总时差与自由时差
- POJ5475 An easy problem【单点更新】
- Android中使用Gson解析数据
- ReactJs 组件间通信
- 对UIBackBarButtonItem的理解
- LinearLayout布局中如何让控件置底
- get_base(current->ldt[1])和get_base(current->ldt[2])
- iOS通过HTTP POST上传文件
- js url传值中文乱码之解决之道
- spring框架之面试
- 第六篇 nstimer 的使用 !!!
- 工作问题
- 黑马程序员——Java基础---多线程