思路:
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
相关推荐
在iOS开发中,自定义Tab Bar是常见的需求,它允许开发者根据应用的UI设计和功能需求,对系统默认的Tab Bar进行个性化定制。这个"IOS源码——自定义Tab Bar的文字、颜色和图片加箭头.7z"压缩包提供了一个示例,展示了...
在iOS开发中,自定义Tab Bar是常见的需求,它能够帮助开发者实现更加个性化和独特的用户界面。本资源“IOS源码——自定义Tab Bar的文字、颜色和图片加箭头.zip”提供了一套实现这一功能的源代码。接下来,我们将详细...
下面我们将深入探讨Swift中自定义Tab Bar的相关知识点。 1. **UITabBarController**:首先,了解`UITabBarController`是iOS SDK中的一个基础类,它负责管理多个`UIViewController`实例,并通过Tab Bar呈现它们。...
本技术资料“自定义Tab Bar的文字、颜色和图片加箭头ios源代码”聚焦于如何根据需求个性化Tab Bar,使其更符合用户体验和设计规范。下面将详细解释这个主题中的关键知识点。 1. 自定义TabBarItem: iOS的Tab Bar...
在iOS应用开发中,自定义Tab Bar是一项常见的需求,它允许开发者根据设计需求调整Tab Bar的样式,包括文字、颜色以及图标。标题"IOS应用源码之自定义Tab Bar的文字、颜色和图片加箭头.zip"揭示了这个压缩包包含了一...
在iOS应用开发中,自定义Tab Bar是一项常见的需求,它能帮助开发者实现更个性化的界面设计,提升用户体验。本实例代码“IOS实例开发源码——自定义Tab Bar的文字、颜色和图片加箭头.zip”正是为了满足这一需求,提供...
这份名为“自定义的tab bar 视图”的压缩包文件提供了有关如何在iOS应用中创建自定义Tab Bar的源代码示例。 首先,我们来看自定义Tab Bar的基本步骤: 1. **创建自定义Tab Bar类**:通常,我们需要继承`UITabBar`...
本资源“ios应用源码之动态tab bar 2018127”提供了一个实现动态Tab Bar的示例代码,对于学习iOS开发尤其是自定义Tab Bar功能具有很大的参考价值。 首先,我们要理解iOS中的Tab Bar Controller工作原理。它是由苹果...
通过这个“ios应用源码之自定义的tab bar 视图 20181210”,你可以深入学习到自定义Tab Bar的实际操作过程,从而在项目中实现更独特、更符合设计要求的Tab Bar视图。在实践中不断迭代优化,提升你的iOS开发技能。
总之,这个“自定义的tab bar 视图”源码提供了一个实践自定义Tab Bar的好例子,涵盖了iOS开发中的多种技术点,对于提升iOS UI设计和编程能力具有很高的学习价值。通过阅读和分析源码,开发者可以了解到如何在实际...
这个“自定义的tab bar 视图.zip”文件提供了一个iOS应用的例子,用于演示如何自定义Tab Bar视图。以下是对这个源码示例的详细解释和相关知识点的介绍: 1. **自定义Tab Bar Controller** - iOS中的Tab Bar ...
本资源“IOS应用源码之自定义的tab bar 视图.zip”提供了一个自定义Tab Bar视图的实例,可以帮助开发者深入了解如何在iOS项目中实现对系统Tab Bar的个性化定制。 自定义Tab Bar视图的主要知识点包括: 1. **自定义...
本资源"IOS应用源码——自定义的tab bar 视图.rar"提供了一个关于如何自定义Tab Bar视图的实例,对于学习iOS开发特别是界面设计和用户体验优化的开发者来说,这是一个非常有价值的学习材料。 在iOS中,系统的...
自定义Tab Bar意味着开发者可能对系统默认的Tab Bar样式或功能进行了扩展和个性化定制,以满足特定的毕业设计需求。 【描述】中提到,这是两年前的源码,适合用于毕业设计的学习。这暗示了该代码可能基于较早版本的...
本资源"IOS应用源码——tab bar controller 自定义颜色和演示demo"提供了一个具体的示例,帮助开发者了解如何自定义Tab Bar的颜色以及实现相关的演示功能。以下是关于这个主题的一些关键知识点: 1. **Tab Bar ...
这个压缩包“IOS源码应用Demo-tab bar controller 自定义颜色和演示demo.zip”显然是一个关于如何自定义Tab Bar颜色并实现相关演示的实例代码,对于学习iOS开发,特别是毕业设计或者论文研究,具有很高的参考价值。...
本资料“ios-自定义tabBar.zip”显然提供了关于如何在iOS应用中实现自定义Tab Bar的示例代码和教程。 在iOS中,自定义Tab Bar通常涉及以下几个关键知识点: 1. **UITabBarController**:这是系统提供的Tab Bar ...