RDVTabBarController
是一個(gè)用來(lái)自定義tabbar
的三方庫(kù),使用簡(jiǎn)單,不過(guò)隱藏tabbar的時(shí)候比較麻煩
用法:與系統(tǒng)tabbar
基本一樣。
隱藏:可以在RootViewController
的viewWillAppear
與viewWillDisappear
中判斷tabbar的隱藏與顯示
問(wèn)題:出現(xiàn)過(guò)一個(gè)詭異的bug,有時(shí)候跳轉(zhuǎn)到tabbar
的root
頁(yè)面中,tabbar
沒(méi)有出現(xiàn),還沒(méi)有跟蹤到問(wèn)題的根由所在。
-(void) viewWillAppear:(BOOL)animated
{
[self.navigationController setNavigationBarHidden:self.hideNavigationBar animated:YES];
if (!self.navigationController) {
[[self rdv_tabBarController] setTabBarHidden:YES animated:NO];
return;
}
if (self.navigationController.viewControllers.count <= 1) {
[[self rdv_tabBarController] setTabBarHidden:NO animated:NO];
return;
}
[super viewWillAppear:animated];
if (self) {
[DataConversion beginLogPageView:NSStringFromClass([self class])];
}
}
-(void)viewWillDisappear:(BOOL)animated
{
if (self) {
[DataConversion endLogPageView:NSStringFromClass([self class])];
}
id cla=[self.navigationController.viewControllers lastObject];
if ([cla isKindOfClass:[HomeViewController class]]||[cla isKindOfClass:[YewuViewController class]]||[cla isKindOfClass:[SettingViewController class]]||[cla isKindOfClass:[MessageViewController class]]) {
[[self rdv_tabBarController] setTabBarHidden:NO animated:NO];
}
if (!self.navigationController) {
[[self rdv_tabBarController] setTabBarHidden:YES animated:NO];
return;
}
if (!self.navigationController.viewControllers.count) {
TabBarViewController *tab=(TabBarViewController *)[EquipmentInformation getCurrentViewController];
if ([tab isKindOfClass:[TabBarViewController class]]) {
tab.tabBarHidden=NO;
}
}
[super viewWillDisappear:animated];
}
RDVTabBarController
由RDVTabBarController
、RDVTabBar
、RDVTabBarItem
組成
//tabbar圖片,對(duì)selectedImage與unselectedImage進(jìn)行賦值 與 finishedSelectedImage、finishedUnselectedImage屬性一致
- (void)setFinishedSelectedImage:(UIImage *)selectedImage withFinishedUnselectedImage:(UIImage *)unselectedImage
//title屬性,tabbar的title
@property (nonatomic, copy) NSString *title;
然后在 RDVTabBarItem:UIControl 類(lèi)中的
- (void)drawRect:(CGRect)rect
方法中用coreText
對(duì)img
與title
進(jìn)行繪制
RDVTabBar : UIView
為RDVTabBarItem
添加點(diǎn)擊事件,添加_backgroundView
//設(shè)置item的frame
- (void)layoutSubviews
//為item添加點(diǎn)擊事件并添加到RDVTabBar上
- (void)setItems:(NSArray *)items {
for (RDVTabBarItem *item in _items) {
[item removeFromSuperview];
}
_items = [items copy];
for (RDVTabBarItem *item in _items) {
[item addTarget:self action:@selector(tabBarItemWasSelected:) forControlEvents:UIControlEventTouchDown];
[self addSubview:item];
}
}
RDVTabBarController : UIViewController
//添加tabbar上的所有viewController,對(duì)RDVTabBarItem進(jìn)行初始化,并對(duì)[self tabBar]的items屬性賦值。
@property (nonatomic, copy) IBOutletCollection(UIViewController) NSArray *viewControllers;
- (void)setViewControllers:(NSArray *)viewControllers {
NSMutableArray *tabBarItems = [[NSMutableArray alloc] init];
for (UIViewController *viewController in viewControllers) {
RDVTabBarItem *tabBarItem = [[RDVTabBarItem alloc] init];
[tabBarItem setTitle:viewController.title];
[tabBarItems addObject:tabBarItem];
[viewController rdv_setTabBarController:self];
}
[[self tabBar] setItems:tabBarItems];
}
//返回某個(gè)viewController
@property (nonatomic, weak) UIViewController *selectedViewController;