1. 程式人生 > >設定backBarButtonItem的幾種方法

設定backBarButtonItem的幾種方法

替換返回按鈕的文字

很多app的要求所有的返回按鈕的title都是“返回”,如果上一層題目文字太多,下一層的返回按鈕文字就會顯示不完全,而且這樣可以使軟體顯得整潔。

方法一:

最普通的想法,A介面的navigationItem.backBarButtonItem修改的是B(A的下一級)介面的返回按鈕,所以可以寫一個BaseViewController,讓所有的UIViewController繼承它,像這樣

1
2
3
4
- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.backBarButtonItem
= [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];
}

方法二:

思路是:在開啟程式時,使用Method Swizzling,將系統自帶的backBarButtonItem方法替換成我們自定義的方法。

具體實現就是建立個 UINavigationItem + BackItem 的類別,當系統執行+load方法時,將backBarButtonItem方法和myCustomBackButton方法交換,利用iOS關聯方法(objc_getAssociatedObject,objc_setAssociatedObject)

static區建立個backItemButton用來展示。這個方法的好處就是將類別匯入到工程裡不用任何程式碼就可以實現,上程式碼吧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
+(void)load{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Method originalMethodImp = class_getInstanceMethod(self, @selector
(backBarButtonItem));
Method destMethodImp = class_getInstanceMethod(self, @selector(myCustomBackButton)); method_exchangeImplementations(originalMethodImp, destMethodImp); }); } static char kCustomBackButtonKey; -(UIBarButtonItem *)myCustomBackButton{ UIBarButtonItem *item = [self myCustomBackButton]; if (item) { return item; } item = objc_getAssociatedObject(self, &kCustomBackButtonKey); if (!item) { item = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:NULL]; objc_setAssociatedObject(self, &kCustomBackButtonKey, item, OBJC_ASSOCIATION_RETAIN_NONATOMIC); } return item; } - (void)dealloc { objc_removeAssociatedObjects(self); }

返回按鈕只顯示自定義圖片

方法一:

最開始我的方案是實現UINavigationController的代理判斷是否是棧底,如果不是就修改leftBarButtonItem的樣式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    UIViewController *root = navigationController.viewControllers[0];

    if (root != viewController) {
        UIBarButtonItem *itemleft = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backBtn"] style:UIBarButtonItemStylePlain target:self action:@selector(popAction:)];
        viewController.navigationItem.leftBarButtonItem = itemleft;
    }
}


- (void)popAction:(UIBarButtonItem *)barButtonItem
{
    [self.navigationController popViewControllerAnimated:YES];
}

iOS7.0出了之後,這並不是一個好的解決方案。因為iOS7.0之後如果把backItemButton替換成leftItemButon,interactivePopGestureRecognizer手勢就沒有了。雖然可以使用

1
self.navigationController.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;

將手勢再加上,但實在是有些麻煩。。可是很多大公司用的都是這個方法。

方法二:

這個方法和上邊‘替換返回按鈕的文字’方法二大致一樣,這句話要替換:

1
item = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back"] style:UIBarButtonItemStylePlain target:nil action:nil];

這句話要加上,用來去除系統自帶的返回按鈕上的尖腳號。

1
2
[[UINavigationBar appearance] setBackIndicatorImage:[[UIImage alloc]init]];
[[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[[UIImage alloc] init]];

相關推薦

Android : 顏色設定方法

平時開發中總是能遇見需要設定顏色的地方,而且每次設定的方法不盡相同,東西瑣碎,自己又不願意記這些,每次都是得查半天,現記錄一下,方便以後查詢 xml設定 這個誰都懂,不說了 class中設定 今天主要記錄這個 利用系統自帶的顏色類 tx.s

設定backBarButtonItem方法

替換返回按鈕的文字 很多app的要求所有的返回按鈕的title都是“返回”,如果上一層題目文字太多,下一層的返回按鈕文字就會顯示不完全,而且這樣可以使軟體顯得整潔。 方法一: 最普通的想法,A介面的navigationItem.backBarButtonItem修改

詳細解說Tomcat 設定虛擬路徑的方法及為什麼設定虛擬路徑

說明:此次使用的是Tomcat 7.0   很多朋友都會很疑惑,既然我們都知道在Tomcat伺服器上部署專案只要將專案打包,然後放到webapps目錄下就可以了,為什麼還需要配置虛擬路徑?的確,把專案放到webapps目錄下非常方便,至少在部署一個專案時,直接把專案扔到webapps目錄下所進行

python os 設定讀取環境變數的方法

專案中的跳板機是用的使用者公私鑰鑑權的,登入跳板機需要使用的每個人的name,因此如果將封裝的MySQL或者Redis方法中傳入USERNAME作為引數的話,感覺有點傻。因此,考慮將名字寫入環境變數。 兩種方法: 1、使用os.environ.setdefault方法寫入(或者直接

伺服器安全升級:ssl證書配置好,設定http跳轉https的方法 伺服器安全升級:ssl證書配置好,設定http跳轉https的方法

轉自https://blog.csdn.net/milli236/article/details/72142066 伺服器安全升級:ssl證書配置好,設定http跳轉https的幾種方法 2017年05月15日 14:17:09 milli236 閱

Linux設定免密登入的方法(ssh-copy-id / ansible)

一. ssh-keygen -t rsa 生成公鑰、私鑰 authorized_keys:存放遠端免密登入的公鑰,主要通過這個檔案記錄多臺機器的公鑰 id_rsa : 生成的私鑰檔案 id_rsa.pub : 生成的公鑰檔案 know_hosts : 已知的主

C語言socket設定超時的方法

1.建立socket2.將該socket設定為非阻塞模式3.呼叫connect()4.使用select()檢查該socket描述符是否可寫(注意,是可寫)5.根據select()返回的結果判斷connect()結果6.將socket設定為阻塞模式(如果你的程式不需要用阻塞模式

MAC 設定環境變數path的方法

mac 一般使用bash作為預設shell Mac系統的環境變數,載入順序為:/etc/profile /etc/paths ~/.bash_profile ~/.bash_login ~/.profile ~/.bashrc當然/etc/profile和/etc/paths是系統級別的,系統啟動就會載入,

設定textview字型顏色的方法

轉自:http://txlong-onz.iteye.com/blog/1249609 android中設定TextView的顏色有方法setTextColor,這個方法被過載了,可以傳入兩種引數。 Java程式碼   public void setText

eclipse配置JDK和設定編譯版本的方法

注:截圖時使用的eclipse4.6、jdk1.8、jdk1.7 一、eclipse配置JDK 開啟window–>preferences,彈出的頁面裡選擇java–>Installed JREs,開啟如下圖介面: 然後點選右側add按

設定session失效的方法

在一般系統登入後,都會設定一個當前session失效的時間,以確保在使用者長時間不與伺服器互動,自動退出登入,銷燬session具體設定的方法有三種:1.在web容器中設定(以tomcat為例)在tomcat-7.0\conf\web.xml中設定,以下是tomcat7.0中預設配置:<session-

設定Java環境變數的方法

JAVA中常用需要設定的三個環境變數:JAVA_HOME、CLASSPATH、PATH(一)配置環境變數:(相對路徑)1.JAVA_HOME=x:\jdk1.6.0JAVA_HOME2.用%JAVA_HOME%就可以取代:x:\jdk1.6.0這一部分CLASSPATH=.:

Qt常見設定背景圖片的方法總結

     常用的設定背景的方式有三種: 1、利用style sheet給窗體設定背景。 2、利用Qt UI設計器的改變樣式表進行設定。如下: 3、通過如下程式碼來實現。 QPixmap pixmap

git設定忽略的方法

1、    環境 Windows XP SP3 + TortoiseGit + msysGit 2、  ignore files的三種方法 以下涉及的ignore檔案均為如下格式: # 以'#'開始的行,被視為註釋.                                      

線程同步的方法

並且 word 進行 void 等待 輸出結果 每次 wait 無法訪問 用什麽關鍵字修飾同步方法 ? 用synchronized關鍵字修飾同步方法 同步有幾種實現方法,都是什麽?分別是synchronized,wait與notify wait():使一個線程處於等待狀

SQL Server遍歷表的方法

都是 遍歷 lec delet -s rop itl 想要 temp  在數據庫開發過程中,我們經常會碰到要遍歷數據表的情形,一提到遍歷表,我們第一印象可能就想到使用遊標,使用遊標雖然直觀易懂,但是它不符合面向集合操作的原則,而且性能也比面向集合低。當然,從面向集合操作的角

Html中嵌套其他HTML文件的方法(轉)

java mar net rip gin bsp ace wid style 給大家整理了3個方法,一個是HTML的iframe標簽,別兩個是JS引用。比如要在arr.html文件裏引用index.html文件,方法如下。 HTML引用方法: <iframe na

將HTML5封裝成android應用APK文件的方法

android作為下一代的網頁語言,HTML5擁有很多讓人期待已久的新特性。HTML5的優勢之一在於能夠實現跨平臺遊戲編碼移植,現在已經有很多公司在移動 設備上使用HTML5技術。隨著HTML5跨平臺支持的不斷增強和智能手機的迅速普,HTML5技術有著非常好的發展前景,甚至有人預言HTML5將引燃 移動平臺遊

C#多線程的方法

task start invoke 數組 erl method 並行計算 bsp nbsp 1、Theard2、TheardPool 線程池3、Task 在Theard上做了優化和改進,建議使用 .start();4、Task.Factory.Start(method)

Java中創建數組的方法

java false 三種 數組下標 [1] [] 判斷 color str Java中創建數組的幾種方法 public static void main(String[] args) { //創建數組的第一種方法 int[] arr=new int[6]; int