UITabBarItem的image/selectedImage/title

國內(nèi)應(yīng)用的比較流行風(fēng)格是由一個UITabBarController來控制不同的板塊。很多應(yīng)用因為營銷的關(guān)系需要隨著各個時間段的不同而調(diào)整UITabBarController里面的各個Controller對應(yīng)的tabBarItem的image/selectedImage/title。例如:餓了么,淘寶,優(yōu)酷....

實現(xiàn)如下:

1.創(chuàng)建一個繼承UITabBarController的子類->>RFTabBarController;

2.在RFTabBarController的.m文件中重寫方法- (void)viewDidLoad;
在- (void)viewDidLoad;中初始化它管理的各個控制器對應(yīng)的tabBarItem。

3.初始化要用下面這個方法:

UITabBarItem *item1 = [[UITabBarItem alloc]
initWithTitle:@"VC1" image:[[UIImage imageNamed:@"VC1_icon"] 
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 
selectedImage:[[UIImage imageNamed:@"VC1_seleted_icon"] 
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];

然后用同樣的方法初始化其他幾個控制器的tabBarItem;

  1. 當(dāng)需要修改tabBarItem的image/selectedImage/title時,這些材料從哪里來?

有些應(yīng)用在發(fā)布之前已經(jīng)計劃好未來會使用到什么樣的圖片,他們會直接把文件放到項目的圖片文件夾中,但是更多的情況是,應(yīng)用的運營者并不知道未來會使用到什么圖片和標題。

這個時候就需要結(jié)合服務(wù)器,當(dāng)應(yīng)用需要更改tabBarItem的image/selectedImage/title時,服務(wù)器就發(fā)一個包給客戶端,客戶端收到包后,讀取其中配置文件的數(shù)據(jù)set到一個自定義的專門用于配置UITabBarController的各個控制器對應(yīng)的tabBarItem的image/selectedImage/title屬性的類中。

例如可以封裝一個模型類:RFTabbarItemsModel


/**標簽欄背景圖片寬度:320*/
@property (nonatomic,strong) NSString *tabbarBgImage320Path;
/**標簽欄背景圖片寬度:375*/
@property (nonatomic,strong) NSString *tabbarBgImage375Path;
/**標簽欄背景圖片寬度:540*/
@property (nonatomic,strong) NSString *tabbarBgImage540Path;

@property (nonatomic,strong) NSString *kuControlImagePath;
@property (nonatomic,strong) NSString *kuControlUnselectImagePath;

@property (nonatomic,strong) NSString *serviceImagePath;
@property (nonatomic,strong) NSString *serviceUnselectImagePath;

@property (nonatomic,strong) NSString *findImagePath;
@property (nonatomic,strong) NSString *findUnselectImagePath;

@property (nonatomic,strong) NSString *mineImagePath;
@property (nonatomic,strong) NSString *mineUnselectImagePath;

/**四個標簽的標題*/
@property (nonatomic,strong) NSString *title1;
@property (nonatomic,strong) NSString *title2;
@property (nonatomic,strong) NSString *title3;
@property (nonatomic,strong) NSString *title4;

5.在RFTabBarController的.m文件中聲明一個用戶修改tabBarItem的image/selectedImage/title的方法

#pragma mark 監(jiān)聽通知修改tabbar的樣式
-(void)changeTabbarStyle{
    
    RFTabbarItemsModel *skinTemplate = [RFTabbarItemsModel sharedRFTabbarItemsModel];
    if (VIEW_BOUNDS.width == 320) {
        //se屏幕
        self.tabBar.backgroundImage = [UIImage imageWithContentsOfFile:skinTemplate.tabbarBgImage320Path];
    }else if (VIEW_BOUNDS.width == 375){
        //iphone6屏幕
        self.tabBar.backgroundImage = [UIImage imageWithContentsOfFile:skinTemplate.tabbarBgImage375Path];
    }else{
        self.tabBar.backgroundImage = [UIImage imageWithContentsOfFile:skinTemplate.tabbarBgImage540Path];
    }
    
    self.tabBar.tintColor = [UIColor colorWithRed:skinTemplate.tabbarSelectColorR green:skinTemplate.tabbarSelectColorG blue:skinTemplate.tabbarSelectColorB alpha:1];
    

    self.yunkongzhiItem.image = [[UIImage imageWithContentsOfFile:skinTemplate.kuControlUnselectImagePath] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.yunkongzhiItem.selectedImage = [[UIImage imageWithContentsOfFile:skinTemplate.kuControlImagePath] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.yunkongzhiItem.title = skinTemplate.title1;
    
    self.carItem.image = [[UIImage imageWithContentsOfFile:skinTemplate.serviceUnselectImagePath] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.carItem.selectedImage = [[UIImage imageWithContentsOfFile:skinTemplate.serviceImagePath] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.carItem.title = skinTemplate.title2;
    
    self.infoItem.image = [[UIImage imageWithContentsOfFile:skinTemplate.findUnselectImagePath] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.infoItem.selectedImage = [[UIImage imageWithContentsOfFile:skinTemplate.findImagePath] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.infoItem.title = skinTemplate.title3;
    
    self.mineItem.image = [[UIImage imageWithContentsOfFile:skinTemplate.mineUnselectImagePath] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.mineItem.selectedImage = [[UIImage imageWithContentsOfFile:skinTemplate.mineImagePath] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.mineItem.title = skinTemplate.title4;

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.自定義控件 a.繼承某個控件 b.重寫initWithFrame方法可以設(shè)置一些它的屬性 c.在layouts...
    圍繞的城閱讀 3,703評論 2 4
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,303評論 4 61
  • 2017年,《大話西游之大圣娶妻未刪減版》又重出江湖了,作為一部1995年出產(chǎn)的經(jīng)典老電影,有人說,這次影院賣的不...
    塔塔塔塔塔塔塔閱讀 313評論 0 5
  • 做敏捷QA五年多,看到了很多人加入,也看到了很多人放棄。其中有經(jīng)驗豐富的測試人員,也有剛剛步入職場的新人。雖然“從...
    ThoughtWorks閱讀 1,669評論 3 9
  • Friday, March 25, 2016 8:34:53 AM 晴 好事不出門,壞事傳千里,人總是樂意...
    天馬蘭心閱讀 239評論 0 0

友情鏈接更多精彩內(nèi)容