[iOS類別的使用]---導覽列leftBarButtonItem表徵圖修改

來源:互聯網
上載者:User

[iOS類別的使用]---導覽列leftBarButtonItem表徵圖修改

類別(Category) 修改特定的ViewController的導覽列Item表徵圖

在項目中,遇到這樣一個問題:
一個新增的VIewController1 想要push到原有的別的VIewController2中時
原有的VIewController2的導覽列左側leftBarButtonItem表徵圖,變成了系統內建的樣式,
而且,由於項目混合使用了代碼和StoryBoard開發,更增加了統一修改leftBarButtonItem的難度!

一般來說,我們會在 VIewController2 中 重新定義一個UIBarButtomItem ,插入如下代碼進行局部修改
代碼如下

-(void)changeleftItem{    UIImageView *imagview = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];    imagview.image = [UIImage imageNamed:@"jiantou"];    UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"jiantou"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStyleDone target:self action:@selector(back)];    self.navigationItem.leftBarButtonItem = left;}-(void)back{    [self.navigationController popViewControllerAnimated:YES];}

如此代碼修改好後:

但是問題來了

如果 我只是修改一個部分, 那麼代碼量還是可以接受的,
而我所希望的是VIewController2 push到的下一個頁面 也是如此
又或則VIewController1 push到 VIewController3頁面, 箭頭表徵圖也要保持一直,難道我要寫很多遍?

我又不想寫一個UIViewController的子類 來作為這些類的父類用以繼承,該怎麼辦??

這時候,
想起來類別(分類 Category)可以擴充類的方法和功能,

( 類別(Category)是一種可以為現有的類(包括類簇:NSString…,甚至源碼無法獲得的類)添加新方法的方式無需從現有的類繼承子類。類別添加的新方法可以被子類繼承。)

這個好,那麼就為UIViewcontroller寫一個分類吧

//.h#import @interface UIViewController (changeLeftItem)-(void)changeleftItem;@end//.m-(void)changeleftItem{    UIImageView *imagview = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];    imagview.image = [UIImage imageNamed:@"jiantou"];    UIBarButtonItem *left = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"jiantou"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] style:UIBarButtonItemStyleDone target:self action:@selector(back)];    self.navigationItem.leftBarButtonItem = left;}-(void)back{    [self.navigationController popViewControllerAnimated:YES];}

//然後,去控制器裡面 ,添加標頭檔名,(或則去pch檔案添加)
然後去時間分類.h裡面的方法吧, 效果就出來了!!

**這也只是少了一半的代碼量而已,如果我要全部修改成現有箭頭的樣式呢? StZ喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcnlCb2FyZCDA78PmxMfDtLbgv9jWxsb3LM7S0qrSu7j2uPbKtc/WPC9wPg0KPHByZSBjbGFzcz0="brush:java;"> [super viewDidLoad];[self changeleftItem];

這個方法嗎??

這個問題我暫時還沒想到,先把知道的寫上吧.

好吧,我粗暴的解決了剛才的問題

1.把剛才的分類標頭檔 放到項目的pch檔案中

然後,因為是正對UIViewController所寫的分類,
所以我們只要去全域尋找

[super viewDidLoad];

然後把它替換成:

    [super viewDidLoad];    [self changeleftItem];

我們看到, 總共替換了將近74處,如果要自己手動添加,估計要暈菜

**當然,這種簡單粗暴的方法, 還需要注意,我們項目中,是有三個rootViewController的,而這三處,是不能添加箭頭的,因此,我們只需要找到這三處, 刪掉調用分類的方法即可,
目前看來,這是比較快捷的辦法了

PS:個人感覺這樣用分類+替換的方法, 要比單純寫一個父類然後去讓眾多子類繼承要好操作一點,

在已經寫好的VIewController上去修改他們的繼承, 那個工作量還是比較大的~

——end
**

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.