`

[IOS]自定义tab bar

    博客分类:
  • IOS
阅读更多

思路:

1.使用TabBarController控制器,控制3个页面的跳转

2.不使用原生的tab bar,自定义3个button来控制跳转

 

一.创建TabBarController,继承UITabBarController

 删掉controller之间的链接

 

 

二.创建对应item的Controller的实现

 

三.TarBarController:

(思路:舍弃系统原生样式,自定义view作为tab bar item的载体,再添加上button。其实在storyboard上面删除tab bar controller与其item controller的链接时,系统的原生tab bar就已经被隐藏了)

@property(retain,nonatomic) UIView *tab_bar_view;
@property(retain,nonatomic) UIButton *firstButton;
@property(retain,nonatomic) UIButton *secondButton;
@property(retain,nonatomic) UIButton *thirdButton;

 

四.代码实现tab bar controller与各item controller的链接

-(void)initTabBarController{
    
    UIStoryboard *board = self.storyboard;
    TestTabBarViewController *testvc = [board instantiateViewControllerWithIdentifier:@"testvc"];
    UIViewController *testvc2 = [board instantiateViewControllerWithIdentifier:@"testvc2"];
    UIViewController *testvc3 = [board instantiateViewControllerWithIdentifier:@"testvc3"];
    
    [self setViewControllers:@[testvc,testvc2,testvc3]];
    
    [self setSelectedViewController:testvc];

}

 

五.自定义tab bar:

-(void)initTabBar{
    CGRect rx = [UIScreen mainScreen].bounds;
    CGFloat screenHeight = rx.size.height;
    CGFloat screenWidth  = rx.size.width;
    
    _tab_bar_view = [[UIView alloc] initWithFrame:CGRectMake(0, screenHeight - 50, screenWidth, 50)];
    
    _tab_bar_view.backgroundColor = [UIColor whiteColor];
    
    [self.view addSubview:_tab_bar_view];
    
    _firstButton = [UIButton buttonWithType:UIButtonTypeCustom];
    _secondButton = [UIButton buttonWithType:UIButtonTypeCustom];
    _thirdButton = [UIButton buttonWithType:UIButtonTypeCustom];
    
    [self initTabButton:_firstButton title:@"item1" buttonTag:0];
    [self initTabButton:_secondButton title:@"item2" buttonTag:1];
    [self initTabButton:_thirdButton title:@"item3" buttonTag:2];
    
    [_tab_bar_view addSubview:_firstButton];
    [_tab_bar_view addSubview:_secondButton];
    [_tab_bar_view addSubview:_thirdButton];
    
//set the button be selected style which is the first view in tab bar controller
    _firstButton.backgroundColor = [UIColor blackColor];
    
}

 

六.设置自定义tab bar item 按钮

-(void)initTabButton:(UIButton*)button title:(NSString *) title buttonTag:(int) i {
//三等分,按钮间留有缝隙
 if (i == 0) {
        button.frame = CGRectMake(0, _tab_bar_view.bounds.origin.y, _tab_bar_view.bounds.size.width/3-1, 50);
    }else if(i == 2){
        button.frame = CGRectMake(i * _tab_bar_view.bounds.size.width/3, _tab_bar_view.bounds.origin.y, _tab_bar_view.bounds.size.width/3, 50);
    }else{
        button.frame = CGRectMake(i * _tab_bar_view.bounds.size.width/3, _tab_bar_view.bounds.origin.y, _tab_bar_view.bounds.size.width/3-1, 50);
    }
    button.tag = i;
    button.backgroundColor = [UIColor lightGrayColor];
    [button setTitle:title forState:UIControlStateNormal];
    [button addTarget:self action:@selector(selectedTab:) forControlEvents:UIControlEventTouchUpInside];
    
}

 

七.设置按钮动作

(效果:被点击的按钮变黑色,其余按钮恢复成灰色)

-(void)selectedTab:(UIButton *)button{
    self.selectedIndex = button.tag;
 
    if (_firstButton == button) {
        _firstButton.backgroundColor = [UIColor blackColor];
        _secondButton.backgroundColor = [UIColor lightGrayColor];
        _thirdButton.backgroundColor = [UIColor lightGrayColor];
    }else if(_secondButton == button){
        _firstButton.backgroundColor = [UIColor lightGrayColor];
        _secondButton.backgroundColor = [UIColor blackColor];
        _thirdButton.backgroundColor = [UIColor lightGrayColor];
    }else if(_thirdButton == button){
        _firstButton.backgroundColor = [UIColor lightGrayColor];
        _secondButton.backgroundColor = [UIColor lightGrayColor];
        _thirdButton.backgroundColor = [UIColor blackColor];
    }

}

 

常用API:

//代码实现指向各item controller的链接
[self setViewControllers:@[testvc,testvc2,testvc3]];

//设置默认的被选择item controller
[self setSelectedViewController:testvc];

//点击哪个item,并跳到该controller
self.selectedIndex = button.tag;

  

八.整合navigation controller

(首先,如果先进入navigation controller,再进入tab bar controller,这种情况,只是第一页是自定义的tab bar item,点击进去其他的页面,虽然也拥有导航条,但是没有tab bar;其次如果不使用代码,用storyboard先进入tab bar controller,然后再进入navigation controller,显示的仍然不是自定义的tab bar,而是原生的item)

所以我们使用代码设置,修改init

-(void)initTabBarController

 TabBarControllerinitTabBarControllertTabBarController

initTabBarController

UIStoryboard *board = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    HomeController *homevc = [board instantiateViewControllerWithIdentifier:@"homevc"];
    UIViewController *testvc2 = [board instantiateViewControllerWithIdentifier:@"testvc2"];
    UIViewController *testvc3 = [board instantiateViewControllerWithIdentifier:@"testvc3"];
    UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:homevc];
    
    [self setViewControllers:@[navi,testvc2,testvc3]];
    
    [self setSelectedViewController:navi];

 

思路是把主页装进navigation controller中,再放进tab bar controller中

 

第二部分,上方的自定义tab bar

一.首要问题是navigation bar会遮挡住tab bar

与属性translucent有关,IOS7以后默认为YES,在navigation bar一下的所有控件都会从(0,0)开始

所以会出现遮挡。

因此需要设置translucent为NO,这样所有控件都会从(0,64)开始

self.navigationController.navigationBar.translucent = NO;

 

二.跳转时隐藏tab bar

//1.设置self.tabBarController.tabBar.hidden=YES;
     
self.tabBarController.tabBar.hidden=YES;
 
//2.如果在push跳转时需要隐藏tabBar,设置self.hidesBottomBarWhenPushed=YES;
 
    self.hidesBottomBarWhenPushed=YES;
    NextViewController *next=[[NextViewController alloc]init];
    [self.navigationController pushViewController:next animated:YES];
    self.hidesBottomBarWhenPushed=NO;
 
//并在push后设置self.hidesBottomBarWhenPushed=NO;
//这样back回来的时候,tabBar会恢复正常显示。

 

三.设置默认tab

由于使用了自定义的view来覆盖了原来的tab bar,所以TabBarController的setSelectedController方法只能改变展示的页面,而没有办法同时改变被选中哪个tab,所以这里要通过自定义方法来设置:

思路:

1.只显示传入的view,其他隐藏;

2.因为不需要用setSelectedController方法,所以要改变一下selectedIndex,用来显示被选择的页面

-(void)setSelectedButton:(UIView *)view{
    [_cv setHidden:YES];
    [_cv2 setHidden:YES];
    [_cv3 setHidden:YES];
    
    self.selectedIndex = view.tag;
    [view setHidden:NO];
}

 

参考:

1.IOS——第二个View中使用TabbarController例子,tabbar中页面间通过非tabbar按钮跳转

http://blog.csdn.net/u012476249/article/details/39031255

2.github:https://github.com/jameskaron/CustomerTabBarView

3.UIButton选中状态下的点击:http://www.jianshu.com/p/57b2c41448bf

4.UITabBarController和UINavigationController的整合:http://blog.csdn.net/hwe_xc/article/details/50588500    

5.探究navigationBar的translucent属性:http://www.jianshu.com/p/428920dd6309

6.在使用NavigationController情况下的布局的Y轴的起始位置:http://www.cnblogs.com/small-octopus/p/4746411.html#undefined

  • 大小: 69.9 KB
分享到:
评论

相关推荐

    IOS源码——自定义Tab Bar的文字、颜色和图片加箭头.7z

    在iOS开发中,自定义Tab Bar是常见的需求,它允许开发者根据应用的UI设计和功能需求,对系统默认的Tab Bar进行个性化定制。这个"IOS源码——自定义Tab Bar的文字、颜色和图片加箭头.7z"压缩包提供了一个示例,展示了...

    IOS源码——自定义Tab Bar的文字、颜色和图片加箭头.zip

    在iOS开发中,自定义Tab Bar是常见的需求,它能够帮助开发者实现更加个性化和独特的用户界面。本资源“IOS源码——自定义Tab Bar的文字、颜色和图片加箭头.zip”提供了一套实现这一功能的源代码。接下来,我们将详细...

    Swift 自定义 Tab bar.zip

    下面我们将深入探讨Swift中自定义Tab Bar的相关知识点。 1. **UITabBarController**:首先,了解`UITabBarController`是iOS SDK中的一个基础类,它负责管理多个`UIViewController`实例,并通过Tab Bar呈现它们。...

    自定义Tab Bar的文字、颜色和图片加箭头ios源代码技术资料

    本技术资料“自定义Tab Bar的文字、颜色和图片加箭头ios源代码”聚焦于如何根据需求个性化Tab Bar,使其更符合用户体验和设计规范。下面将详细解释这个主题中的关键知识点。 1. 自定义TabBarItem: iOS的Tab Bar...

    IOS应用源码之自定义Tab Bar的文字、颜色和图片加箭头.zip

    在iOS应用开发中,自定义Tab Bar是一项常见的需求,它允许开发者根据设计需求调整Tab Bar的样式,包括文字、颜色以及图标。标题"IOS应用源码之自定义Tab Bar的文字、颜色和图片加箭头.zip"揭示了这个压缩包包含了一...

    IOS实例开发源码——自定义Tab Bar的文字、颜色和图片加箭头.zip

    在iOS应用开发中,自定义Tab Bar是一项常见的需求,它能帮助开发者实现更个性化的界面设计,提升用户体验。本实例代码“IOS实例开发源码——自定义Tab Bar的文字、颜色和图片加箭头.zip”正是为了满足这一需求,提供...

    IOS应用源码之自定义的tab bar 视图 .rar

    这份名为“自定义的tab bar 视图”的压缩包文件提供了有关如何在iOS应用中创建自定义Tab Bar的源代码示例。 首先,我们来看自定义Tab Bar的基本步骤: 1. **创建自定义Tab Bar类**:通常,我们需要继承`UITabBar`...

    ios应用源码之动态tab bar 2018127

    本资源“ios应用源码之动态tab bar 2018127”提供了一个实现动态Tab Bar的示例代码,对于学习iOS开发尤其是自定义Tab Bar功能具有很大的参考价值。 首先,我们要理解iOS中的Tab Bar Controller工作原理。它是由苹果...

    ios应用源码之自定义的tab bar 视图 20181210

    通过这个“ios应用源码之自定义的tab bar 视图 20181210”,你可以深入学习到自定义Tab Bar的实际操作过程,从而在项目中实现更独特、更符合设计要求的Tab Bar视图。在实践中不断迭代优化,提升你的iOS开发技能。

    IOS应用源码——自定义的tab bar 视图.zip

    总之,这个“自定义的tab bar 视图”源码提供了一个实践自定义Tab Bar的好例子,涵盖了iOS开发中的多种技术点,对于提升iOS UI设计和编程能力具有很高的学习价值。通过阅读和分析源码,开发者可以了解到如何在实际...

    自定义的tab bar 视图.zipIOS应用例子源码下载

    这个“自定义的tab bar 视图.zip”文件提供了一个iOS应用的例子,用于演示如何自定义Tab Bar视图。以下是对这个源码示例的详细解释和相关知识点的介绍: 1. **自定义Tab Bar Controller** - iOS中的Tab Bar ...

    IOS应用源码之自定义的tab bar 视图.zip

    本资源“IOS应用源码之自定义的tab bar 视图.zip”提供了一个自定义Tab Bar视图的实例,可以帮助开发者深入了解如何在iOS项目中实现对系统Tab Bar的个性化定制。 自定义Tab Bar视图的主要知识点包括: 1. **自定义...

    IOS应用源码——自定义的tab bar 视图.rar

    本资源"IOS应用源码——自定义的tab bar 视图.rar"提供了一个关于如何自定义Tab Bar视图的实例,对于学习iOS开发特别是界面设计和用户体验优化的开发者来说,这是一个非常有价值的学习材料。 在iOS中,系统的...

    IOS应用源码Demo-自定义的tab bar 视图-毕设学习.zip

    自定义Tab Bar意味着开发者可能对系统默认的Tab Bar样式或功能进行了扩展和个性化定制,以满足特定的毕业设计需求。 【描述】中提到,这是两年前的源码,适合用于毕业设计的学习。这暗示了该代码可能基于较早版本的...

    IOS应用源码——tab bar controller 自定义颜色和演示demo.rar

    本资源"IOS应用源码——tab bar controller 自定义颜色和演示demo"提供了一个具体的示例,帮助开发者了解如何自定义Tab Bar的颜色以及实现相关的演示功能。以下是关于这个主题的一些关键知识点: 1. **Tab Bar ...

    IOS源码应用Demo-tab bar controller 自定义颜色和演示demo.zip

    这个压缩包“IOS源码应用Demo-tab bar controller 自定义颜色和演示demo.zip”显然是一个关于如何自定义Tab Bar颜色并实现相关演示的实例代码,对于学习iOS开发,特别是毕业设计或者论文研究,具有很高的参考价值。...

    ios-自定义tabBar.zip

    本资料“ios-自定义tabBar.zip”显然提供了关于如何在iOS应用中实现自定义Tab Bar的示例代码和教程。 在iOS中,自定义Tab Bar通常涉及以下几个关键知识点: 1. **UITabBarController**:这是系统提供的Tab Bar ...

Global site tag (gtag.js) - Google Analytics