zoukankan      html  css  js  c++  java
  • iOS

    前言

    	NS_CLASS_AVAILABLE_IOS(2_0) @interface UITabBarController : UIViewController <UITabBarDelegate, NSCoding>
    	@available(iOS 2.0, *)		 public class UITabBarController : UIViewController, UITabBarDelegate, NSCoding 
    
    • UITabBarController: 分栏视图控制器,在创建时,需要一次性的将所有 viewController 或 navigationController 添加到 UITabBarController 的 viewControllers 属性中。

    • UITabBarController 一次性添加了很多个视图控制器,但是在程序的运行的时候,并不是一次性将所有视图控制器对象进行创建和显示,而是用户点击显示那个视图控制器对象,系统才会创建和显示该视图。如果默认首先显示的不是 viewController1,例如是显示 viewController3, 系统首先创建 viewController1 和 viewController3,viewController2 和 viewController4 用户点击显示的时候才会被显示出来,无论先显示那个 viewController,viewController1 总是会被创建。

    • TabBarController 最多只能显示 5 个视图,超过 5 个的都会以 more 的形式显示,点击 more,剩余的视图将会被显示。当点击 Edit 时可以改变分栏上放置的分栏项。

    • TabBarController 的高度固定为 49,图片的尺寸最好为 30 * 30。

    1、tabBarController 的创建

    • Objective-C

      • 创建分栏视图控制器

        	UITabBarController *tabBarController = [[UITabBarController alloc] init];
            
          	// 将 tabBarController 添加到 viewController 上
        	[self addChildViewController:tabBarController];
        	[self.view addSubview:tabBarController.view];
           
           	// 将 navigationController 做为 window 的根视图控制器
        	self.window.rootViewController = tabBarController;
        
      • 设置分栏视图控制器包含的视图控制器

        	// 实例化视图控制器对象(或者 导航视图控制器对象)
        	ViewController11 *viewController1 = [[ViewController11 alloc] init];
        	ViewController12 *viewController2 = [[ViewController12 alloc] init];
        	ViewController13 *viewController3 = [[ViewController13 alloc] init];
        	ViewController14 *viewController4 = [[ViewController14 alloc] init];
        
        	NSArray *viewControllerArray = @[viewController1, viewController2, 
        	                                 viewController3, viewController4];
        
        	// 向分栏视图控制器中添加视图控制器
        	tabBarController.viewControllers = viewControllerArray;
        
      • 设置分栏显示的标题和图片

        	// 设置显示的 title
        	NSArray *titleArray = @[@"微信", @"通讯录", @"发现", @"我"];
        
        	// 设置选择时显示的图片
        	NSArray *selectImageArray = @[@"tabbar_mainframeHL", @"tabbar_contactsHL", 
        	                              @"tabbar_discoverHL", @"tabbar_meHL"];
        
        	// 设置未选择时显示的图片
        	NSArray *unSelectImagArray = @[@"tabbar_mainframe", @"tabbar_contacts", 
        	                               @"tabbar_discover", @"tabbar_me"];
        
        	for (int i = 0; i < 4; i++) {
        	
            	// 从 tabBarController 中取出 tabBarItem 成员
            	UITabBarItem *tabBarItem = tabBarController.tabBar.items[i];
            
            	tabBarItem = [tabBarItem initWithTitle: titleArray[i] 
            	                                 image: [[UIImage imageNamed:unSelectImagArray[i]] 
            	                        imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 
            	                         selectedImage: [[UIImage imageNamed:selectImageArray[i]] 
            	                        imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
        	}
        
      • 设置分栏标题文字颜色

        	// 选中时颜色,默认为蓝色
        	tabBarController.tabBar.tintColor = [UIColor greenColor];
        
    • Swift

      • 创建分栏视图控制器

        	let tabBarController = UITabBarController()
        
        	// 将 tabBarController 添加到 viewController 上
        	self.addChildViewController(tabBarController)
        	self.view.addSubview(tabBarController.view)
        	
        	// 将 navigationController 做为 window 的根视图控制器
        	self.window?.rootViewController = tabBarController
        
      • 设置分栏视图控制器包含的视图控制器

        	// 实例化视图控制器对象(或者 导航视图控制器对象)
        	let viewController1 = ViewController11()
        	let viewController2 = ViewController12()
        	let viewController3 = ViewController13()
        	let viewController4 = ViewController14()
        
        	let viewControllerArray:Array = [viewController1, viewController2, 
                                         viewController3, viewController4]
        
        	// 向分栏视图控制器中添加视图控制器
        	tabBarController.viewControllers = viewControllerArray
        
      • 设置分栏显示的标题和图片

        	// 设置显示的 title
        	let titleArray = ["微信", "通讯录", "发现", "我"];
        
        	// 设置选择时显示的图片
        	let selectImageArray = ["tabbar_mainframeHL", "tabbar_contactsHL", 
        	                        "tabbar_discoverHL", "tabbar_meHL"]
        
        	// 设置未选择时显示的图片
        	let unSelectImagArray = ["tabbar_mainframe", "tabbar_contacts", "tabbar_discover", "tabbar_me"]
        
        	for i in 0 ..< 4 {
            
            	viewControllerArray[i].tabBarItem = UITabBarItem(title: titleArray[i],
            	                                                 image: UIImage(named: unSelectImagArray[i])!
            	                                                 .imageWithRenderingMode(.AlwaysOriginal), 
            	                                         selectedImage: UIImage(named: selectImageArray[i])!
                                                              .imageWithRenderingMode(.AlwaysOriginal))
        	}
        
      • 设置分栏标题文字颜色

        	// 选中时颜色,默认为蓝色
        	tabBarController.tabBar.tintColor = UIColor.greenColor()
        

    2、tabBarController 的设置

    • Objective-C

      	// 设置首先显示的视图控制器
          
      		// 视图的添加顺序已知
      		/*
      			用添加顺序的标号指定
      		*/
          	tabBarController.selectedIndex = 1;
              
      		// 视图的添加顺序未知
              
             	// for-in 循环
             	for (UIViewController *viewController in tabBarController.viewControllers) {
                      
             		if ([viewController isKindOfClass:[ViewController14 class]]) {
                          
             			// 设置首先显示的 viewController
             			/*
             				直接指定视图控制器的名称
             			*/
             			tabBarController.selectedViewController = viewController;
             		}
             	}
                  
             	// block 循环
             	[viewControllerArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
                      
             		if ([obj isKindOfClass:[ViewController14 class]]) {
                          
             			tabBarController.selectedViewController = obj;
             		}
             	}];
          	
      	// 设置分栏标题文字颜色
      	/*
      		选中时颜色,默认为蓝色
      	*/
      	
          	// 选中时颜色
      		tabBarController.tabBar.tintColor = [UIColor greenColor];
      
      		// 选中时颜色
      		[[UITabBarItem appearance] setTitleTextAttributes:
      		                             @{NSForegroundColorAttributeName:[UIColor greenColor]} 
      		                                                     forState:UIControlStateSelected];
      
      		// 未选中时颜色
      		[[UITabBarItem appearance] setTitleTextAttributes:
      		                             @{NSForegroundColorAttributeName:[UIColor grayColor]} 
      		                                                     forState:UIControlStateNormal];
          
      	// 设置背景颜色
      	/*
      		一个 tabBarController 只有一个 tabBar
      	*/
       	tabBarController.tabBar.barTintColor = [UIColor blueColor];
          
       	// 设置背景图片
       	tabBarController.tabBar.backgroundImage = [UIImage imageNamed:@"tabbarBkg.png"];
          
       	// 消除图片阴影线
        	tabBarController.tabBar.shadowImage = [[UIImage alloc] init];
          
       	// 设置分栏图片大小
       	/*
       		图片尺寸为 49*49 时,此设置值能使图片高度与分栏高度重合
       	*/
       	UITabBarItem *item0 = [tabBarController.tabBar.items objectAtIndex:0];
      	item0.imageInsets = UIEdgeInsetsMake(5, 0, -6, 0);
          
       	// 关闭分栏的半透明状态
        	tabBarController.tabBar.translucent = NO;
          
       	// 隐藏分栏视图控制器
       	/*
       		导航视图控制器推出新的视图时,隐藏新视图下的分栏视图控制器
       	*/
       	tabBarController.hidesBottomBarWhenPushed = YES;
          
       	// 设置代理,需遵守协议 <UITabBarControllerDelegate>
      	tabBarController.delegate = self;
      
    • Swift

      	// 设置首先显示的视图控制器
          
      		// 视图的添加顺序已知
      		/*
      			用添加顺序的标号指定
      		*/
          	tabBarController.selectedIndex = 1;
              
      		// 视图的添加顺序未知
              
      			// for-in 循环
      			for vc in viewControllerArray {
                      
      				if vc.isKindOfClass(ViewController14.self) {
                          
      					// 设置首先显示的 viewController
      					/*
      						直接指定视图控制器的名称
      					*/
      					tabBarController.selectedViewController = vc
      				}
      			}
          
      	// 设置分栏标题文字颜色
      	/*
      		选中时颜色,默认为蓝色
      	*/
          
          	// 选中时颜色
           	tabBarController.tabBar.tintColor = UIColor.greenColor()
              
            	// 选中时颜色
          	UITabBarItem.appearance()
          	            .setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.greenColor()], 
          	                                                           forState: .Selected)
      
      		// 未选中时的标题颜色
          	UITabBarItem.appearance()
          	            .setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], 
          	                                                           forState: .Normal)
          
      	// 设置背景颜色
      	/*
      		一个 tabBarController 只有一个 tabBar
      	*/
       	tabBarController.tabBar.barTintColor = UIColor.cyanColor()
          
      	// 设置背景图片
        	tabBarController.tabBar.backgroundImage = UIImage(named: "tabbarBkg.png")
          
      	// 消除图片阴影线
      	/*
      		消除图片边框线
      	*/
       	tabBarController.tabBar.shadowImage = UIImage()
          
      	// 设置分栏图片大小
      	/*
      		图片尺寸为 49*49 时,此设置值能使图片高度与分栏高度重合
      	*/
         	let item0 = tabBarController.tabBar.items?[0]
        	item0!.imageInsets = UIEdgeInsetsMake(5, 0, -6, 0)
          
      	// 关闭分栏的半透明状态
        	tabBarController.tabBar.translucent = false
          
      	// 隐藏分栏视图控制器
      	/*
      		导航视图控制器推出新的视图时,隐藏新视图下的分栏视图控制器
      	*/
      	tabBarController.hidesBottomBarWhenPushed = true
          
      	// 设置代理,需遵守协议 UITabBarControllerDelegate
        	tabBarController.delegate = self;
      

    3、UITabBarControllerDelegate 协议方法

    • 需遵守协议 UITabBarControllerDelegate,并设置代理

    • Objective-C

      	// 将要选择的某个 viewController 是否允许被选择
      	- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
            	
            	// 允许编辑
      		return YES;
      	}
      
      	// 已经选择
      	- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
              
      		NSLog(@"%li", tabBarController.selectedIndex);
      	}
      
      	// 将要开始编辑(超过5个时进行 edit 时触发)
      	- (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers {
              
      	}
      
      	// 已经结束编辑
      	- (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed {
              
      	}
      
      	// 已经结束编辑
      	- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed {
              
      	}
      
    • Swift

      	// 将要选择的某个 viewController 是否允许被选择
      	func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
             
      		// 允许编辑
      		return true
      	}
          
      	// 已经选择
      	func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
              
      	}
          
      	// 将要开始编辑(超过5个时进行 edit 时触发)
      	func tabBarController(tabBarController: UITabBarController, willBeginCustomizingViewControllers viewControllers: [UIViewController]) {
              
      	}
          
      	// 已经结束编辑
      	func tabBarController(tabBarController: UITabBarController, willEndCustomizingViewControllers viewControllers: [UIViewController], changed: Bool) {
              
      	}
          
      	// 已经结束编辑
      	func tabBarController(tabBarController: UITabBarController, didEndCustomizingViewControllers viewControllers: [UIViewController], changed: Bool) {
              
      	}
      

    4、Storyboard 中设置

    • 在 Storyboard 场景中设置

      TabBar

      • Tab Bar Item

        Badge 未读消息标记
        System Item tabBarItem 类型
        Selected Image 选中时的图片,设置时无效,需在代码中设置
        Title Position 标题的位置
      • Bar Item

        Title tabBarItem 标题
        Image 未选中时的图片
        Tag tag 值
        -- Enable tabBarItem 是否允许点击
    • 在 Storyboard 场景绑定的 Controller 中设置

      • 设置分栏选中时的文字颜色

        	/*
        		只需要设置一次,在所有的 item 中都会改变
        		同时会改变未选中时的图片的颜色
        	*/
        	
        	self.tabBarController.tabBar.tintColor = [UIColor greenColor];
        
      • 设置分栏选中时的图片

        	/*
        		每个 item 中都需要单独设置
        	*/
        
        	// 在每个场景绑定的 ViewController 中单独设置
        
        	self.tabBarItem.selectedImage = [[UIImage imageNamed:@"tabbar_mainframeHL"] 
        	                                     imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            
        	// 在一个场景绑定的 ViewController 中全部设置
        
        	UITabBarItem *item0 = [self.tabBarController.tabBar.items objectAtIndex:0];
        	item0.selectedImage = [[UIImage imageNamed:@"tabbar_mainframeHL"] 
        	                                     imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            
        	UITabBarItem *item1 = [self.tabBarController.tabBar.items objectAtIndex:1];
        	item1.selectedImage = [[UIImage imageNamed:@"tabbar_contactsHL"] 
        	                                     imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            
        	UITabBarItem *item2 = [self.tabBarController.tabBar.items objectAtIndex:2];
        	item2.selectedImage = [[UIImage imageNamed:@"tabbar_discoverHL"] 
        	                                     imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
            
        	UITabBarItem *item3 = [self.tabBarController.tabBar.items objectAtIndex:3];
        	item3.selectedImage = [[UIImage imageNamed:@"tabbar_meHL"] 
        	                                     imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        
  • 相关阅读:
    CentOS 8.0配置阿里云yum源和epel源
    CentOS8 安装epel 使用阿里云镜像
    centos下yum使用proxy代理方法
    MySQL中的事务控制(一)start transaction
    MySQL中的锁定语句: lock tables 和 unlock tables
    MySQL中的触发器
    MySQL中的事件调度器
    MySQL中的流程控制
    MySQL中的不可见索引、倒序索引
    IDEA出现Push to origin/master was rejected
  • 原文地址:https://www.cnblogs.com/QianChia/p/5757774.html
Copyright © 2011-2022 走看看