tabBarController也算是我們比較常用的亏娜。因為個人不太喜歡用SB铛纬,所以今天就用純代碼封裝了一個。文章的最后我會給出一個用SB自定義TabBar的博文棒呛。感覺也挺好的聂示。我準備也去嘗試一下。
首先說創(chuàng)建一個工程簇秒,這里選擇Single View Application鱼喉,因為我們記下來使用純代碼去。創(chuàng)建工程完成之后,作者的習慣是干掉自帶的Sb和ViewController扛禽,我一般都會這么干锋边。
然后創(chuàng)建自定義的類XHCTarBarController,繼承于UITabBarController编曼。在此開始之前我們要明確一下事豆巨,自定義TabBarController我們首先要定義出子ViewController和tabBarItem。下面是我自己封裝的實現(xiàn)方法;
- (UIViewController *)createViewControllerWith:(NSString *)vcName withTitle:(NSString *)title withNormalImg:(NSString *)normalImage withSelectedImage:(NSString *)selectedImage {
Class cls = NSClassFromString(vcName);
UIViewController *vc = [[cls alloc] init];
UIImage *norImg = [UIImage imageNamed:normalImage];
UIImage *selImg = [UIImage imageNamed:selectedImage];
//適配iOS7以后的版本掐场,iOS7以前默認渲染保持圖片原樣往扔。
if ([UIDevice currentDevice].systemVersion.floatValue >= 7.0) {
norImg = [norImg imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
selImg = [selImg imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
vc.tabBarItem = [[UITabBarItem alloc] initWithTitle:title image:norImg selectedImage:selImg];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
return nav;
}
代碼對于大家來說應該是比較簡單的。這里對UIImage的處理說明一下刻肄,為了保證圖片的原樣瓤球,不讓圖片出現(xiàn)默認那種藍色的效果。我們需要設置圖片的渲染模式敏弃。因為我們還有可能在其他地方用到這個,所以我們可以給UIimage添加一個catagory噪馏。代碼如下:
+ (UIImage *)loadImageWithImgName:(NSString *)imageName {
UIImage *img = [UIImage imageNamed:imageName];
if ([UIDevice currentDevice].systemVersion.floatValue >= 7.0) {
return [img imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
return img;
}
一般來說麦到,我覺得能適配到iOS8就可以了,因為馬上就iOS10了欠肾,適配那么低的版本干嘛瓶颠?當然這根據(jù)你們公司的需要自己定制。
完成了這件事之后刺桃,我們基本上就完成了絕大部分的事情粹淋。下一步我們直接創(chuàng)建tabBarcontroller就可以了。
- (void)createTabBarController {
for (NSDictionary *controller in self.controllersInfo) {
UIViewController *vc = [self createViewControllerWith:controller[@"controller"] withTitle:controller[@"title"] withNormalImg:controller[@"normalImage"] withSelectedImage:controller[@"selectedImage"]];
[self.cs addObject:vc];
}
self.viewControllers = [self.cs copy];
}
以上就是我自定義tarBarController的所有代碼瑟慈。在這里有幾件事跟大家分享一下:
1.數(shù)據(jù)源
這里我說的數(shù)據(jù)就是控制器的名字桃移,標題,圖片常規(guī)狀態(tài)下的名字和選中狀態(tài)下的名字葛碧。在這里我有三個方案提供給大家:
1.詞典-》數(shù)組
2.先建立Modal-》數(shù)組
上面兩種方法應該是相當簡單的方法了借杰,簡單明了。不過接下來我想跟大家分享另外一種方法:
1.首先我們創(chuàng)建一個plist文件进泼,然后設置root為NSarry蔗衡,item類型為NSDictionary。
2.然后將item的key設置為有關屬性的的名字乳绕,value為相應的值绞惦。
3.運用文件操作的只是從plist文件中取出,放到數(shù)組里洋措。
這樣做有很多好處济蝉,1.好維護,當控制器新添或者刪除時直接刪除對應的item就行,不過修改任何代碼堆生。2.可視化专缠,這樣比較直觀。很適合編程剛剛入門的新手們淑仆。3.個人覺得比較高大上一些涝婉,哈哈哈。當然創(chuàng)建plist文件相對于前兩中方法蔗怠,還是沒有降低操作復雜度墩弯。大家按照個人喜好來。
2.修改字體顏色
這個我不太了解其中內涵寞射。就直接給大家貼代碼渔工,有知道的童鞋可以給作者留言。
+ (void)initialize {
[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor grayColor]} forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor redColor]} forState:UIControlStateSelected];
}
作者的了解桥温,就是當這里初始化的時候引矩,調用這個方法,然后修改item的顯示侵浸。具體就不會了旺韭。demo在[這里],大家去下載吧掏觉。
附錄:
運用SB的教程--[tarBarController-SB]
[這里]:http://pan.baidu.com/s/1bpFlxyn
[tarBarController-SB]:http://www.theappguruz.com/blog/customize-tab-bar-controller-in-ios