iOS阶段学习第33天笔记(自定义标签栏(tabBar)介绍)

iOS学习(UI)知识点整理

一、自定义标签栏

1)方法一 单个创建标签栏

 1 #import "AppDelegate.h"
 2 #import "SecondViewController.h"
 3 #import "ViewController.h"
 4 #import "ThirdViewController.h"
 5 #import "ForthViewController.h"
 6 #import "ViewController1.h"
 7 #import "ViewController2.h"
 8 #import "ViewController3.h"
 9 #import "ViewController4.h"
10 @interface AppDelegate ()<UITabBarControllerDelegate>
11 @end
12
13 @implementation AppDelegate
14 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
15     //1.直接设置默认的标签的属性
16     UINavigationController *navi1 = [[UINavigationController alloc]initWithRootViewController:[ViewController new]];
17     //设置navi1所对应的界面的标签的标题
18     navi1.tabBarItem.title = @"home";
19     //设置navi1所对应的标签的图标
20     navi1.tabBarItem.image = [[UIImage imageNamed:@"tabbar_account_press"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
21     //2.直接创建一个新的标签
22     UIViewController *vc1 = [ViewController1 new];
23     //创建的方式里面包含三个参数:文字标题,普通状态下的图片,选中状态下的图片
24     UITabBarItem *item = [[UITabBarItem alloc]initWithTitle:@"界面二"  image:[UIImage imageNamed:@"tabbar_appfree"]        selectedImage:[UIImage imageNamed:@"tabbar_account"]];
25     vc1.tabBarItem = item;
26     //设置数字徽标,用来提示用户
27     item.badgeValue = @"20";
28     //设置系统图标右上角的数字
29     [[UIApplication sharedApplication] setApplicationIconBadgeNumber:55];
30
31
32     //3.创建标签的另一种方式
33     UINavigationController *navi2 = [[UINavigationController alloc]initWithRootViewController:[ViewController2 new]];
34     //参数:标题和图片
35     UITabBarItem *item2 = [[UITabBarItem alloc]initWithTitle:@"界面三" image:[UIImage imageNamed:@"tabbar_reduceprice"] tag:100];
36     item2.selectedImage = [UIImage imageNamed:@"tabbar_subject"];
37     navi2.tabBarItem = item2;
38
39
40     //4.他们系统样式的标签
41     UINavigationController *navi3 = [[UINavigationController alloc]initWithRootViewController:[ViewController3 new]];
42     //使用系统的样式创建标签,图片和文字都无法修改
43     navi3.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemDownloads tag:200];
44     //无法修改
45     navi3.tabBarItem.title = @"界面四";
46     UINavigationController *navi4 = [[UINavigationController alloc]initWithRootViewController:[ViewController4 new]];
47     navi4.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemFeatured tag:101];
48
49     //如果创建的标签数量大于5个,则从第5个开始(包括第5个)都会被放到More标签中
50     UINavigationController *navi5 = [[UINavigationController alloc]initWithRootViewController:[SecondViewController new]];
51     navi5.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemHistory tag:101];
52
53     //创建标签栏控制器
54     UITabBarController *tabbar = [[UITabBarController alloc]init];
55     //设置标签栏控制器所管理的视图控制器
56     tabbar.viewControllers = @[navi1,vc1,navi2,navi3,navi4,navi5];
57     NSInteger index = [[[NSUserDefaults standardUserDefaults]valueForKey:@"selectedindex"] integerValue];
58      //设置tabbar选中的标签
59     tabbar.selectedIndex = index;
60     tabbar.delegate = self;
61     self.window.rootViewController = tabbar;
62     self.window.backgroundColor = [UIColor whiteColor];
63     return YES;
64 }
65
66 //选中某一个视图控制器的时候,调用该方法
67 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
68 {
69     [[NSUserDefaults standardUserDefaults]setValue:@(tabBarController.selectedIndex) forKey:@"selectedindex"];
70     [[NSUserDefaults standardUserDefaults]synchronize];
71     NSLog(@"%@",viewController);
72 }
73
74 //自定义视图控制器完成的时候调用
75 - (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers      changed:(BOOL)changed
76 {
77     NSLog(@"%@",viewControllers);
78 }
79 @end

2)方法二 循环遍历创建标签栏
 
 1)创建一个继承自UIButton的类 MyTabbBarItem 用于创建标签栏的按钮
      MyTabbBarItem.h  文件中的代码实现

1 #import <UIKit/UIKit.h>
2  @interface MyTabbBarItem : UIButton
3  @end

2) MyTabbBarItem.m  文件中的代码实现

 1 #import "MyTabbBarItem.h"
 2 @implementation MyTabbBarItem
 3 - (instancetype)initWithFrame:(CGRect)frame
 4 {
 5     self = [super initWithFrame:frame];
 6     if (self) {
 7         self.titleLabel.font = [UIFont systemFontOfSize:12];
 8         self.titleLabel.textAlignment = NSTextAlignmentCenter;
 9         [self setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
10         [self setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
11     }
12     return self;
13 }
14
15 //这个方法返回的cgrect是按钮上的title部分的位置和大小
16 - (CGRect)titleRectForContentRect:(CGRect)contentRect
17 {
18     return CGRectMake(0, 30, contentRect.size.width, 15);
19 }
20
21 - (CGRect)imageRectForContentRect:(CGRect)contentRect
22 {
23     return CGRectMake((contentRect.size.width - 26)/2, 2, 26, 26);
24 }

3)自定义标签栏的类 MyTabBarController.h 代码实现

1 #import <UIKit/UIKit.h>
2 @interface MyTabBarController : UITabBarController
3
4 @end

4)自定义标签栏的类 MyTabBarController.m 代码实现

  1 #import "MyTabBarController.h"
  2 #import "ViewController.h"
  3 #import "ViewController1.h"
  4 #import "ViewController2.h"
  5 #import "ViewController3.h"
  6 #import "ViewController4.h"
  7 #import "MyTabbBarItem.h"
  8
  9 @interface MyTabBarController ()
 10 {
 11     UIImageView *_myTabbar;
 12 }
 13 @end
 14
 15 @implementation MyTabBarController
 16
 17 - (void)viewDidLoad {
 18     [super viewDidLoad];
 19
 20     //配置标签栏控制器
 21     //自定义标签栏的步骤
 22
 23     //1.隐藏系统的标签栏
 24     self.tabBar.hidden = YES;
 25
 26     //3.创建所有的视图控制器
 27     [self createViewControllers];
 28
 29     //2.创建一个新标签栏
 30     [self createTabbar];
 31
 32     //4.创建所有标签
 33     [self createTabs];
 34
 35     //5.标签和视图控制器进行关联
 36
 37 }
 38
 39 -(void)createTabbar
 40 {
 41     CGRect frame = [[UIScreen mainScreen]bounds];
 42     frame.origin.y = frame.size.height - 49;
 43     frame.size.height = 49;
 44
 45     _myTabbar = [[UIImageView alloc]initWithFrame:self.tabBar.bounds];
 46
 47     _myTabbar.backgroundColor = [UIColor blueColor];
 48
 49     //将自定义标签栏添加在系统标签栏上
 50     [self.tabBar addSubview:_myTabbar];
 51     _myTabbar.userInteractionEnabled = YES;
}
 54 -(void)createViewControllers
 56 {
 57     NSArray *vcArray = @[@"ViewController",
 58                          @"ViewController1",
 59                          @"ViewController2",
 60                          @"ViewController3",
 61                          @"ViewController4"];
 62
 63     NSMutableArray *vcs = [[NSMutableArray alloc]init];
 64     for (int i = 0; i<vcArray.count; i++) {
 65         //反射(将字符串对象转换成对应的类对象)
 66         UIViewController *vc = [[NSClassFromString(vcArray[i]) alloc]init];
 67         vc.navigationItem.title = vcArray[i];
 68         UINavigationController *navi = [[UINavigationController alloc]initWithRootViewController:vc];
 69         [vcs addObject:navi];
 70     }
 71     self.viewControllers = vcs;
 72 }
 73
 74 -(void)createTabs
 75 {
 76     NSArray *titleArray = @[@"首页",@"社会",@"金融",@"法制",@"教育"];
 77     NSArray *imageArray = @[@"tabbar_account",
 78                             @"tabbar_appfree",
 79                             @"tabbar_limitfree",
 80                             @"tabbar_reduceprice",
 81                             @"tabbar_subject"];
 82     NSArray *imageSelectedArray = @[@"tabbar_account_press",
 83                             @"tabbar_appfree_press",
 84                             @"tabbar_limitfree_press",
 85                             @"tabbar_reduceprice_press",
 86                             @"tabbar_subject_press"];
 87
 88
 89     for (int i = 0; i<titleArray.count; i++) {
 90         MyTabbBarItem *btn = [MyTabbBarItem buttonWithType:UIButtonTypeCustom];
 91         [btn setTitle:titleArray[i] forState:UIControlStateNormal];
 92         [btn setImage:[UIImage imageNamed:imageArray[i]] forState:UIControlStateNormal];
 93         [btn setImage:[UIImage imageNamed:imageSelectedArray[i]] forState:UIControlStateSelected];
 94         if (i == 0) {
 95             btn.selected = YES;
 96         }
 97         CGFloat width = [[UIScreen mainScreen]bounds].size.width/5;
 98         btn.frame = CGRectMake(width * i, 0, width, 49);
 99         [_myTabbar addSubview:btn];
100         btn.tag = 100 + i;
101         [btn addTarget:self action:@selector(selectAction:) forControlEvents:UIControlEventTouchUpInside];
103     }
105 }
106
107 -(void)selectAction:(UIButton *)btn
108 {
109     NSInteger index = btn.tag - 100;
110     self.selectedIndex = index;
112     for (UIButton *btn in _myTabbar.subviews) {
113         btn.selected = NO;
114     }
116     //设置selected属性
117     btn.selected = YES;
118 }
119
120 @end

5)AppDelegate.m  文件中的代码实现

1 //系统自带的标签的高度是49
2 //可以自定义标签来设置不同高度的标签栏
3 //此处不能指定导航栏否则标签栏无法显示,因为后面会指定导航栏
4 MyTabBarController *tabbar = [[MyTabBarController alloc]init];
5 self.window.rootViewController = tabbar;
6 self.window.backgroundColor = [UIColor whiteColor];
7 return YES;
时间: 2024-10-09 15:49:56

iOS阶段学习第33天笔记(自定义标签栏(tabBar)介绍)的相关文章

IOS 阶段学习第24天笔记(Block的介绍)

IOS学习(OC语言)知识点整理 一.Block 的介绍 1)概念: block 是一种数据类型,类似于C语言中没有名字的函数,可以接收参数,也可以返回值与C函数一样被调用 封装一段代码 可以在任何地方调用 block 也可以作为函数参数,以及函数返回值 2)Block 实例代码 1 //定义了一个block类型MyBlock,MyBlock类型的变量只能指向带两个int的参数和返回int的代码块 2 typedef int (^MyBlock)(int,int); 3 //定义一个函数指针 4

IOS 阶段学习第23天笔记(XML数据格式介绍)

IOS学习(OC语言)知识点整理 一.XML数据格式介绍 1)概念:xml是extensible markup language扩展的标记语言,一般用来表示.传输和存储数据 2)xml与json目前使用比较广泛的两种网络传输数据格式 两者分别占比: 1. json:市场上占90%,轻量级的表示数据 2.xml:占10%,表示数据比较复杂 3)XML三种数据解析方法: 1.DOM解析:将整个xml数据加载到内存中,构造一个对象,从根结点开始一级一级的解析提取数据.缺点:如果数据大, 比较占内存,解

iOS阶段学习第32天笔记(页面传值方法介绍)

iOS学习(UI)知识点整理 一.界面传值方法 1.方法一  Block传值  通过SubView视图的Block向View视图传值改变View视图的背景色 实例代码: 1)SubViewController.h 文件的代码实现 1 #import <UIKit/UIKit.h> 2 @interface SubViewController : UIViewController 3 @property (nonatomic,copy) void(^callback)(UIColor *colo

iOS阶段学习第26天笔记(UILabel的介绍)

iOS学习(UI)知识点整理 一.关于UILabel的使用介绍 1)概念:UILabel是一个继承自UIView的用于展示文本信息的控件 2)UI中所有的控件都继承自UIView 即UIView 是UI的祖宗类. 3)UILable的实例化方式 代码: 1 UILabel *label=[[UILabel alloc]init]; //初始化UILabel 2 label.text=@"Hello,KingKong";//给label赋值文本内容 3 label.backgroundC

iOS阶段学习第30天笔记(UIViewController—UINavigationController)

iOS学习(UI)知识点整理 一.UIViewController的介绍 1)概念:UIViewController 即视图控制器,用来管理和控制页面跳转的一个类 ,iOS里面采用了MVC的体系结构,在UI方便的 具体表现为View加ViewController.所以UIViewController是iOS应用当中非常常用而且很重要的一个类;一般使用都是自己写 一个类继承UIViewController这个类.在UIViewController里面有一个很重要的属性那就是View,也就 是这个C

IOS阶段学习第四天笔记(循环)

    IOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ }  两种 2.单分支 if表达式成立则执行{ }里的语句:双分支 if表达式不成立 则执行else{ }里面的语句 3.字符串的输出系统会从数组地址一直打印到字符 ‘\0’为止,如果没有正确初始化,可能会打印出数组外的信息 4.如果分支结构里面只有一条执行语句可省略外面的大括号{} . 二.开关语句 1.语句结构 :switch (参数) case

IOS阶段学习第三天笔记(运算符)

                                         IOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运算符优先级 括号()> * ,/ ,%  >+,- 4)%表示取余.取模  a%b 表示a除以b取余数 5)整数相除保留两位小数处理方法如: printf(“%.2f”,(float)14/9); 6)自增自减运算符

IOS阶段学习第21天笔记(ARC内存管理-Copy-代理)

IOS学习(OC语言)知识点整理 一.OC 中的ARC内存管理 1)ARC中释放对象的内存原则:看这个对象有没有强引用指向它 2)strong:强引用,默认情况下的引用都是强引用 3) weak:弱引用__weak 4)ARC环境下:与内存相关的代码都不能使用了,如果要在ARC环境下使用MRC内存管理代码 如: [super    delloc]  选中项目找到 Build Phases 菜单下的  Compile Sources 项 选中要转换的.m文件, 双击写入此行代码:-fno-objc

IOS阶段学习第18天笔记(归档与解归档操作)

IOS学习(OC语言)知识点整理 一.归档与解归档的操作 1)归档是一个过程,将一个或多个对象存储起来,以便以后可以还原,包括将对象存入文件,以后再读取 将数据对象归档成plist文件 2)plist文件中只能存放:NSString.NSDate.NSNumber.Bool.NSData.NSArray.NSDictionary 并且NSArray和NSDictionary中只能是以上的类型 3)归档存放时数据是什么类型,读取数据时就用什么类型的数据接收. 4)归档不能直接操作自定义对象类型的数