修改系统默认的backBarButtonItem的title和action

1、为什么在UIViewController内设置了self.navigationItem.backBarButtonItem 对于导航栏显示的backBarButtonItem不起任何作用?

首先我们得了解一下

backBarButtonItem

leftBarButtonItem

rightBarButtonItem

他们都属于UINavigationItem的组成部分,都显示在navigationBar上,都属于UIBarButtonItem类

backBarButtonItem和另外两兄弟是有区别的

比如当前有AController准备push到BController,设置backBarButtonItem的title和image需要在AController内设置,在调用AController Push:B之前进行设置,AController.navigationItem.backBarButtonItem = ....

而其他两兄弟则是在BController的ViewDidload后设置均可.

backBarButtonItem的描述

Discussion

When this navigation item is immediately below the top item in the stack, the navigation controller derives the back button for the navigation bar from this navigation item. When this property is nil, the navigation item uses the value in its title property to create an appropriate back button. If you want to specify a custom image or title for the back button, you can assign a custom bar button item (with your custom title or image) to this property instead. When configuring your bar button item, do not assign a custom view to it; the navigation item ignores custom views in the back bar button anyway.

说明了backBarButtonItem只能自定义image和title,不能重写target or action,系统会忽略其他的相关设置项。

如果硬是需要重写action做一些其他的工作,则需要自定义一个leftBarButtonItem,因为系统定义leftBarButtonItem的显示优先级比backBarButtonItem优先级高,当存在leftBarButtonItem时,自动忽略backBarButtonItem,达到重写backBarButtonItem的目的。

2、各个对象下的backBarButtonItem的区别

对于这3兄弟,在3个类下面都能发现他们

比如当前在一个UIViewController内,输入以下方法都能发现他们。(同leftBarButtonItem | rightBarButtonItem)

self.navigationItem.backBarButtonItem

self.navigationController.navigationItem.backBarButtonItem

self.navigationController.navigationBar.backItem.backBarButtonItem

比如在AController->BController,在A设置了self.navigationItem.backBarButtonItem,经过试验发现,这个backBarButtonItem为BController的self.navigationController.navigationBar.backItem.backBarButtonItem。

UIViewController的属性navigationItem正是被当前UINavigationBar--[UINavigationBar appearance]管理的属性

 
@property(nonatomic, readonly, retain)UINavigationItem *navigationItem
The navigation item used to represent the view controller in a parent’s navigation bar. (read-only)

self.navigationController.navigationItem.backBarButtonItem

则是表示当前navigationController的parent的UINavigationBar,一般情况下没有这样的嵌套。

时间: 2024-11-10 21:27:21

修改系统默认的backBarButtonItem的title和action的相关文章

修改系统默认语言

一.简介 在Linux的系统中经常碰到字符集导致的错误,本文总结了设置修改系统语言环境的方法步骤. 二.操作步骤 执行如下指令,查看当前使用的系统语言 echo $LANG 执行如下指令,查看系统安装的语言包 locale 有zh_CN表示已经安装了中文语言,如果没有中文语言,可以执行如下指令,安装中文语言包 yum groupinstall chinese-support 临时更换语言,可以通过输入设置 LANG=语言名称,如下 LANG="Zn_CN.UTF-8" 修改系统默认语言

CentOS修改系统默认语言与编码

有时候在安装CentOS无意中把默认语言设置为中文,而部分SSH软件不支持中文编码,所以在远程管理的时候会出现些乱码的现象. 如何修改CentOS的默认语言呢? 请先使用root权限帐户登陆 一.进入语言配置文件 vi  /etc/sysconfig/i18n 用SSH执行以上命令,用vi编辑器修改/etc/sysconfig/i18n文件.  www.2cto.com 二.修改语言 将默认的LANG="zh_CN.UTF-8"修改为 LANG="en_US.UTF-8&qu

如何设置backBarButtonItem的title和action

1.为什么在UIViewController内设置了self.navigationItem.backBarButtonItem 对于导航栏显示的backBarButtonItem不起任何作用? 首先我们得了解一下 backBarButtonItem(其中当text属性太长时就会显示失败) leftBarButtonItem rightBarButtonItem 他们都属于UINavigationItem的组成部分,都显示在navigationBar上,都属于UIBarButtonItem类 ba

iOS中设置backBarButtonItem的title和action

一. 设置title 在需要显示该返回键的前一个Controller中设置: 1: navigationItem.backBarButtonItem = UIBarButtonItem(title: "注销", style: UIBarButtonItemStyle.Plain, target: nil, action: nil) .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: co

centos 6.9修改系统默认字符集

[[email protected] ~]# locale –a #列出系统所支持的所有字符集 aa_DJ aa_DJ.iso88591 aa_DJ.utf8 aa_ER [email protected] aa_ER.utf8 [email protected] ......... yum -y groupinstall chinese-support 安装中文支持包 修改方法: 1 export LANG=zh_CN.UTF8 #临时修改 2 vim /etc/sysconfig/i18n

Oracle如何修改系统默认时间格式

解决办法有: 1.临时修改 alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS'; 这种方法只能改掉在当前会话里的日期显示格式,当重新建立一个会话的时候,必须重新执行该命令. 2.改变oracle默认的日期显示格式 alter system set nls_date_format='YYYY-MM-DD HH24:MI:SS' scope=spfile; 需要重启数据库生效.

Android 修改系统默认盘符名称

1.修改路径:frameworks/av/media/mtp/MtpServer.cpp 2.修改方法: MtpResponseCode MtpServer::doGetDeviceInfo() { mData.putString(string); // Manufacturer property_get("ro.product.model", prop_value, "MTP Device"); - string.set(prop_value); + string

[Linux] 修改系统默认编码

locale 命令 locale 命令用以设置程序运行的语言环境. locale 设置语言环境的命名规则为 Language_area.charset,例如 en_US.utf8 表示语言为英语,地区为美国,字符集为 UTF-8. 查看当前字符映射文件 $ locale charmapUTF-8 查看可用公共语言环境 $ locale -a C C.UTF-8 en_AG ... 查看可用字符映射文件 $ locale -a C C.UTF-8 en_AG ... 设置默认编码 编辑 ~/.ba

修改 Android 5.x 系统默认音量大小

修改系统默认音量需要改两处地方: 1. frameworks\base\media\java\android\media\AudioManager.java 1 /** @hide Default volume index values for audio streams */ 2 public static final int[] DEFAULT_STREAM_VOLUME = new int[] { 3 4, // STREAM_VOICE_CALL 4 7, // STREAM_SYSTE