- | 特色 | 解釋 |
---|---|---|
1 | 低耦合 | 與業務徹底分離,最低只需傳兩個數組便可完成主流App框架搭建 |
2 | TabBar內均使用系統的TabbarItem ,並不是UIButton或UIView | 無需反覆調「間距位置等」來接近系統效果 |
3 | 自動監測是否須要添加「加號」按鈕,並能自動設置位置 | CYLTabBarController 既支持相似微信的「中規中矩」的 TabBarController 樣式,而且默認就是微信這種樣式,同時又支持相似「微博」或「淘寶閒魚」這種具備不規則加號按鈕的 TabBarController 。想支持這種樣式,只需自定義一個加號按鈕,CYLTabBarController 能檢測到它的存在並自動將 tabBar 排序好,無需多餘操做,而且也預留了必定接口來知足自定義需求。「加號」按鈕的樣式、frame均在自定義的類中獨立實現,不會涉及tabbar相關設置。 |
4 | 即便加號按鈕超出了tabbar的區域,超出部分依然能響應點擊事件 | 紅線內的區域均能響應tabbar相關的點擊事件, |
5 | 支持CocoaPods | 容易集成 |
(學習交流羣:498865024)3d
既支持默認樣式 | 同時也支持建立自定義的形狀不規則加號按鈕 |
---|---|
本倉庫配套Demo的效果: | 另外一個Demo 使用CYLTabBarController實現了微博Tabbar框架,效果以下 |
---|---|
四步完成主流App框架搭建:
在 Podfile
中以下導入:
pod 'CYLTabBarController'
而後使用 cocoaPods
進行安裝:
建議使用以下方式:
# 不升級CocoaPods的spec倉庫 pod update --verbose
- (void)setupViewControllers { CYLHomeViewController *firstViewController = [[CYLHomeViewController alloc] init]; UIViewController *firstNavigationController = [[UINavigationController alloc] initWithRootViewController:firstViewController]; CYLSameFityViewController *secondViewController = [[CYLSameFityViewController alloc] init]; UIViewController *secondNavigationController = [[UINavigationController alloc] initWithRootViewController:secondViewController]; CYLTabBarController *tabBarController = [[CYLTabBarController alloc] init]; [self customizeTabBarForController:tabBarController]; [tabBarController setViewControllers:@[ firstNavigationController, secondNavigationController, ]]; self.tabBarController = tabBarController; } /* * 在`-setViewControllers:`以前設置TabBar的屬性, * */ - (void)customizeTabBarForController:(CYLTabBarController *)tabBarController { NSDictionary *dict1 = @{ CYLTabBarItemTitle : @"首頁", CYLTabBarItemImage : @"home_normal", CYLTabBarItemSelectedImage : @"home_highlight", }; NSDictionary *dict2 = @{ CYLTabBarItemTitle : @"同城", CYLTabBarItemImage : @"mycity_normal", CYLTabBarItemSelectedImage : @"mycity_highlight", }; NSArray *tabBarItemsAttributes = @[ dict1, dict2 ]; tabBarController.tabBarItemsAttributes = tabBarItemsAttributes; }
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { /* *省略部分: * */ [self.window setRootViewController:self.tabBarController]; /* *省略部分: * */ return YES; }
建立一個繼承於 CYLPlusButton 的類,要求和步驟:
實現 CYLPlusButtonSubclassing
協議
子類將自身類型進行註冊,通常可在 application
的 applicationDelegate
方法裏面調用 [YourClass registerSubClass]
或者在子類的 +load
方法中調用:
+(void)load { [super registerSubclass]; }
協議提供了兩個可選方法:
+ (NSUInteger)indexOfPlusButtonInTabBar; + (CGFloat)multiplerInCenterY;
做用分別是:
+ (NSUInteger)indexOfPlusButtonInTabBar;
用來自定義加號按鈕的位置,若是不實現默認居中,可是若是 tabbar
的個數是奇數則必須實現該方法,不然 CYLTabBarController
會拋出 exception
來進行提示。
+ (CGFloat)multiplerInCenterY;
該方法是爲了調整自定義按鈕中心點Y軸方向的位置,建議在按鈕超出了 tabbar
的邊界時實現該方法。返回值是自定義按鈕中心點Y軸方向的座標除以 tabbar
的高度,若是不實現,會自動進行比對,預設一個較爲合適的位置,若是實現了該方法,預設的邏輯將失效。
詳見Demo中的 CYLPlusButtonSubclass
類的實現。
若是想更進一步的自定義 TabBar
樣式可在 -application:didFinishLaunchingWithOptions:
方法中設置
/** * tabBarItem 的選中和不選中文字屬性、背景圖片 */ - (void)customizeInterface { // 普通狀態下的文字屬性 NSMutableDictionary *normalAttrs = [NSMutableDictionary dictionary]; normalAttrs[NSForegroundColorAttributeName] = [UIColor grayColor]; // 選中狀態下的文字屬性 NSMutableDictionary *selectedAttrs = [NSMutableDictionary dictionary]; selectedAttrs[NSForegroundColorAttributeName] = [UIColor darkGrayColor]; // 設置文字屬性 UITabBarItem *tabBar = [UITabBarItem appearance]; [tabBar setTitleTextAttributes:normalAttrs forState:UIControlStateNormal]; [tabBar setTitleTextAttributes:normalAttrs forState:UIControlStateHighlighted]; UITabBar *tabBarAppearance = [UITabBar appearance]; [tabBarAppearance setBackgroundImage:[UIImage imageNamed:@"tabbar_background"]]; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { /* *省略部分: * */ [self.window makeKeyAndVisible]; [self customizeInterface]; return YES; }
(更多iOS開發乾貨,歡迎關注 微博@iOS程序犭袁 )
Posted by 微博@iOS程序犭袁
原創文章,版權聲明:自由轉載-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0