iOS控件之UITabBarController(分栏控制器)
这段代码写在#import "AppDelegate.m"里面
为了体现分栏,以下我创建了三个视图控制器
#import "AppDelegate.h"
#import "VCFirst.h"
#import "VCSecond.h"
#import "VCThird.h"
#import "rootViewController.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//创建window
self.window=[ [UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
//self.window.rootViewController = [[rootViewController alloc] init];
//self.window.backgroundColor = [UIColor whiteColor];
//显示window
[self.window makeKeyAndVisible];
//创建控制器一
VCFirst* vcFirst = [[VCFirst alloc] init];
//创建控制器二
VCSecond* vcSecond = [[VCSecond alloc] init];
//黄色背景
vc.Second.view.backgroundColor = [UIColor yellowColor];
//创建控制器三
VCThird* vcThird = [[VCThird alloc] init];
//橙色背景
vcThird.view.backgroundColor = [UIColor orangeColor];
vcFirst.title = @"视图1";
vcSecond.title = @"视图2";
vcThird.title = @"视图3";
//蓝色背景
//这里一定要注意,使用点语法会访问viewDidLoad.
//注意颜色失效问题
vcFirst.view.backgroundColor = [UIColor blueColor];
//创建分栏控制器对象
UITabBarController* tbController = [[UITabBarController alloc] init];
//创建一个控制器数组对象
//将所有要被分栏控制器管理的对象添加到数组中
NSArray* arrayVC = [NSArray arrayWithObjects:vcFirst,vcSecond,vcThird, nil];
//将分栏视图控制器管理数组赋值
tbController.viewControllers = arrayVC;
//将分栏控制器作为根视图控制器
self.window.rootViewController = tbController;
//设置选中的视图控制器的索引
//通过索引来确定显示哪一个控制器
tbController.selectedIndex = 2;
//当前选中的控制器对象
if (tbController.selectedViewController == vcThird) {
NSLog(@"当前显示的是控制器三~");
}
//设置分栏控制器的工具栏的透明度
tbController.tabBar.translucent = NO;
//改变工具栏颜色
tbController.tabBar.barTintColor = [UIColor redColor];
//更改按钮风格颜色
tbController.tabBar.tintColor = [UIColor blackColor];
return YES;
}
接下来就是完成各个视图控制器啦。先来看VCFirst
- (void)viewDidLoad {
[super viewDidLoad];
//创建一个分栏按钮对象
//参数一:文字
//P2:显示图片图标
//P3:设置按钮的tag值
//方法一:
// UITabBarItem* tabBarItem = [[UITabBarItem alloc] initWithTitle:@"111" image:nil tag:101];
// self.tabBarItem = tabBarItem;
//根据系统风格创建分栏按钮
//P1:系统风格设定
UITabBarItem* tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemContacts tag:101];
//按钮右上角的提示信息
//通常用来提示未读的信息
tabBarItem.badgeValue = @"99";
self.tabBarItem = tabBarItem;
}
道理都是一样的,vcSecond vcThird就不多赘述了
//个人总结:在设置各个元素项的背景颜色时,要注意语句的先后允许顺序。否则可能会导致设置失效。
接下来看几个UITabBarController(分栏控制器)协议函数
既然是协议函数,肯定要先设置代理啦
在AppDelegate.h里面
@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>
然后
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//这里面要多一条语句
tbController.delegate = self;
}
现在就可以开始写协议函数了
//开始编辑前调用
-(void) tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(nonnull NSArray<__kindof UIViewController *> *)viewControllers {
NSLog(@"编辑器前");
}
-(void) tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed {
NSLog(@"即将结束前!");
}
-(void) tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray<__kindof UIViewController *> *)viewControllers changed:(BOOL)changed {
NSLog(@"vcs = %@",viewControllers);
if (changed == YES) {
NSLog(@"顺序发生改变!");
}
NSLog(@"已经结束编辑!");
}
// 要注意有这个方法时,点击more会报错。因为它传入的参数是一个视图控制器。
-(void) tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
if (tabBarController.viewControllers[tabBarController.selectedIndex] == viewController) {
NSLog(@"OK!");
}
NSLog(@"选中控制器对象");
}
个人总结:
OC中的方法名大多很长,因此我们平时练习时要注意它的名字,最后能理解它的意思,特别是传入的参数。