RDVTabBarController

RDVTabBarController是一个用来自定义tabbar的三方库,使用简单,不过隐藏tabbar的时候比较麻烦
用法:与系统tabbar基本一样。
隐藏:可以在RootViewControllerviewWillAppearviewWillDisappear中判断tabbar的隐藏与显示
问题:出现过一个诡异的bug,有时候跳转到tabbarroot页面中,tabbar没有出现,还没有跟踪到问题的根由所在。

-(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];
}

RDVTabBarControllerRDVTabBarControllerRDVTabBarRDVTabBarItem组成

//tabbar图片,对selectedImage与unselectedImage进行赋值 与 finishedSelectedImage、finishedUnselectedImage属性一致
- (void)setFinishedSelectedImage:(UIImage *)selectedImage withFinishedUnselectedImage:(UIImage *)unselectedImage

//title属性,tabbar的title
@property (nonatomic, copy) NSString *title;

然后在 RDVTabBarItem:UIControl 类中的

- (void)drawRect:(CGRect)rect 

方法中用coreTextimgtitle进行绘制


RDVTabBar : UIViewRDVTabBarItem添加点击事件,添加_backgroundView

//设置item的frame
- (void)layoutSubviews 

//为item添加点击事件并添加到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,对RDVTabBarItem进行初始化,并对[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];
}
//返回某个viewController
@property (nonatomic, weak) UIViewController *selectedViewController;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容