UIKit 框架之Bar、Controller
UIKit框架中有各种Bar,UITabBar、UINavigationBar、UIToolbar。Bar对应的就有一些Item,tabBarItem、navigationItem、toolbarItems,再加上UIViewController、UINavigationController、UITabBarController很容易搞糊涂。我看了好久,没看明白。动手敲了下才有一点感觉。
一、联系
一个UINavigationController对应着一个UINavigationBar、UIToolbar,UIToolbar默认不显示,toolbarHidden=NO时显示。一个UITabBarController对应着一个UITabBar.一个UIViewController对应着一个tabBarItem、navigationItem和多个toolbarItems。navigationItem中可以设置左右按钮和中间视图等。
二、代码demo
1.首先代码结构 viewController1-viewController5用于生成5个tabBarItem。viewController、viewController6主要模拟登录注册,有时候需要先让用户登录注册之后才能进入。
2.代码
1.在AppDelegate.m中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { tabBarViewController *tabVc=[[tabBarViewController alloc]init]; [self.window makeKeyAndVisible]; self.window.backgroundColor=[UIColor whiteColor]; self.window.rootViewController=tabVc; return YES; }
2.ViewController.m
// // ViewController.m // UITabBarController // // Created by City--Online on 15/5/26. // Copyright (c) 2015年 XQB. All rights reserved. // #import "ViewController.h" #import "ViewController6.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%@ %@",NSStringFromCGRect(self.tabBarController.tabBar.frame),NSStringFromCGRect(self.navigationController.toolbar.frame)); UIButton *btn=[UIButton buttonWithType:UIButtonTypeSystem]; btn.frame=CGRectMake(100, 100, 100, 100); [btn setTitle:@"按钮" forState:UIControlStateNormal]; [btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn]; UIBarButtonItem *item1=[[UIBarButtonItem alloc]initWithBarButtonSystemItem: UIBarButtonSystemItemDone target:self action:nil]; self.toolbarItems=@[item1]; } -(void)btnClick:(id)sender { ViewController6 *vc6=[[ViewController6 alloc]init]; vc6.title=@"第6页"; vc6.hidesBottomBarWhenPushed=YES; [self.navigationController pushViewController:vc6 animated:YES]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
3.ViewController1.m
// // ViewController1.m // UITabBarController // // Created by City--Online on 15/5/26. // Copyright (c) 2015年 XQB. All rights reserved. // #import "ViewController1.h" #import "ViewController2.h" @interface ViewController1 () @end @implementation ViewController1 - (void)viewDidLoad { [super viewDidLoad]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
4.ViewController2.m
// // ViewController2.m // UITabBarController // // Created by City--Online on 15/5/26. // Copyright (c) 2015年 XQB. All rights reserved. // #import "ViewController2.h" #import "ViewController.h" #import "navigationViewController.h" @interface ViewController2 () @end @implementation ViewController2 - (void)viewDidLoad { [super viewDidLoad]; ViewController *vc=[[ViewController alloc]init]; // navigationViewController *nav=[[navigationViewController alloc]initWithRootViewController:vc]; // self.navigationController.toolbarHidden=NO; // nav.toolbarHidden=NO; [self.navigationController addChildViewController:vc]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
5.ViewController6.m
// // ViewController6.m // UITabBarController // // Created by City--Online on 15/5/26. // Copyright (c) 2015年 XQB. All rights reserved. // #import "ViewController6.h" @interface ViewController6 () @end @implementation ViewController6 - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%@ %@",NSStringFromCGRect(self.tabBarController.tabBar.frame),NSStringFromCGRect(self.navigationController.toolbar.frame)); UIBarButtonItem *item1=[[UIBarButtonItem alloc]initWithBarButtonSystemItem: UIBarButtonSystemItemAdd target:self action:@selector(btnClick:)]; self.toolbarItems=@[item1]; } -(void)btnClick:(id)sender { [self.navigationController popToRootViewControllerAnimated:YES]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
6.tabBarViewController.m继承UITabBarController
// // tabBarViewController.m // UITabBarController // // Created by City--Online on 15/5/26. // Copyright (c) 2015年 XQB. All rights reserved. // #import "tabBarViewController.h" #import "ViewController.h" #import "ViewController1.h" #import "ViewController2.h" #import "ViewController3.h" #import "ViewController4.h" #import "ViewController5.h" #import "navigationViewController.h" @interface tabBarViewController ()<UITabBarControllerDelegate> @end @implementation tabBarViewController - (void)viewDidLoad { [super viewDidLoad]; [self steup]; self.delegate=self; self.selectedIndex=2; self.moreNavigationController.tabBarItem=[[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemRecents tag:1001]; self.moreNavigationController.navigationItem.rightBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"编辑" style:UIBarButtonItemStyleDone target:self action:nil]; self.moreNavigationController.visibleViewController.navigationItem.title=@"更多功能"; self.moreNavigationController.visibleViewController.navigationItem.rightBarButtonItem.title=@"编辑"; } -(void)rightClick:(id)sender { } -(void)steup { ViewController *vc=[[ViewController alloc]init]; vc.title=@"第0页"; navigationViewController *nvc=[[navigationViewController alloc]initWithRootViewController:vc]; nvc.toolbarHidden=NO; UITabBarItem *tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第0页" image:[UIImage imageNamed:@"tabbar_homepage_normal"] selectedImage:[UIImage imageNamed:@"tabbar_homepage_selected"]]; tabBarItem.badgeValue=@"2"; nvc.tabBarItem=tabBarItem; ViewController1 *vc1=[[ViewController1 alloc]init]; vc1.title=@"第1页"; navigationViewController *nvc1=[[navigationViewController alloc]initWithRootViewController:vc1]; nvc1.tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第1页" image:[UIImage imageNamed:@"tabbar_convenience_normal"] selectedImage:[UIImage imageNamed:@"tabbar_convenience_selected"]]; ViewController2 *vc2=[[ViewController2 alloc]init]; vc2.title=@"第2页"; navigationViewController *nvc2=[[navigationViewController alloc]initWithRootViewController:vc2]; nvc2.toolbarHidden=NO; nvc2.tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第2页" image:[UIImage imageNamed:@"tabbar_electrice_commerce_normal"] selectedImage:[UIImage imageNamed:@"tabbar_electrice_commerce_selected"]]; ViewController3 *vc3=[[ViewController3 alloc]init]; vc3.title=@"第3页"; navigationViewController *nvc3=[[navigationViewController alloc]initWithRootViewController:vc3]; vc3.tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第3页" image:[UIImage imageNamed:@"tabbar_me_normal"] selectedImage:[UIImage imageNamed:@"tabbar_me_selected"]]; ViewController4 *vc4=[[ViewController4 alloc]init]; vc4.title=@"第4页"; navigationViewController *nvc4=[[navigationViewController alloc]initWithRootViewController:vc4]; nvc4.tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第4页" image:[UIImage imageNamed:@"tabbar_convenience_normal"] selectedImage:[UIImage imageNamed:@"tabbar_convenience_selected"]]; ViewController5 *vc5=[[ViewController5 alloc]init]; vc5.title=@"第5页"; navigationViewController *nvc5=[[navigationViewController alloc]initWithRootViewController:vc5]; nvc5.tabBarItem=[[UITabBarItem alloc]initWithTitle:@"第5页" image:[UIImage imageNamed:@"tabbar_homepage_normal"] selectedImage:[UIImage imageNamed:@"tabbar_homepage_selected"]]; // 默认的顺序 NSArray *defaultarr=@[nvc,nvc1,nvc2,nvc3,nvc4,nvc5]; // 自定义的顺序 NSMutableArray *newarr=[[NSMutableArray alloc]init]; //获取保存的title数组 NSArray *titles=[[NSUserDefaults standardUserDefaults] arrayForKey:@"vcs"]; // 第一次启动为nil if (titles==nil) { newarr=[defaultarr copy]; } //根据自定义title数组 设置newarr数组 for (NSString *s in titles) { for (navigationViewController *nvc in defaultarr) { if ([s isEqualToString:nvc.visibleViewController.title]) { [newarr addObject:nvc]; } } } self.viewControllers=newarr; } //UITabBarControllerDelegate //是否可以选中 - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { return YES; } //选中某个viewController - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { // NSLog(@"%@",viewController.title); } //开始自定义viewControllers - (void)tabBarController:(UITabBarController *)tabBarController willBeginCustomizingViewControllers:(NSArray *)viewControllers { NSLog(@"%@",viewControllers); } //即将编辑结束 - (void)tabBarController:(UITabBarController *)tabBarController willEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed { NSLog(@"%d",changed); } //编辑结束 - (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed { //记下选择的选项顺序,方便下次启动时显示 NSMutableArray *arr=[[NSMutableArray alloc]init]; if (!changed) { return; } for (UIViewController *vc in viewControllers) { [arr addObject:vc.title]; } NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; [defaults setObject:arr forKey:@"vcs"]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end
7.navigationViewController.m
// // navigationViewController.m // UITabBarController // // Created by City--Online on 15/5/26. // Copyright (c) 2015年 XQB. All rights reserved. // #import "navigationViewController.h" @interface navigationViewController ()<UINavigationControllerDelegate> @end @implementation navigationViewController - (void)viewDidLoad { [super viewDidLoad]; // if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) // { // self.edgesForExtendedLayout = UIRectEdgeNone; // } self.navigationController.navigationBar.translucent=NO; self.delegate=self; } - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { NSLog(@"%@",viewController.title); } - (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end
实现效果:
UIKit 框架之Bar、Controller的更多相关文章
- Tab Bar Controller和Navigation Controller混合使用详细教程
在IPHONE上,NAV和TAB混合使用的案例很多.但很多书籍都没详细介绍这个是怎么使用的.我也找了很久才弄清楚怎么做.现在分享给大家. 1.先建立一个Window-based Application ...
- [New learn] UIKit 框架类
NSObject NSObject is the root class of most Objective-C class hierarchies. NSDataAsset The NSDataAss ...
- UIKit框架使用总结--看看你掌握了多少
一.经常使用的,基本就是每次项目迭代都需要使用的 UIView.UILabel.UIImage.UIColor.UIFont.UIImageView.UITextField.UIButton. UIS ...
- Swift - 重写UIKit框架类的init初始化方法(以UITabBarController为例)
原来写了篇文章讲UITabBarController的用法,当时是从UIViewController跳转到UITabBarController页面,代码如下: 1 self.presentViewCo ...
- iOS第八课——Navigation Controller和Tab bar Controller
今天我们要学习Navigation Controller和Tab bar Controller. Navigation Controller是iOS编程中比较常用的一种容器,用来管理多个视图控制器. ...
- UIKit框架
在今后的应用程序构建中,会陆续使用各式各样的控件,因此UIKit框架的引入是必不可少的! 一.简介 UIKitk框架提供一系列的Class(类)来建立和管理iPhone OS应用程序的用户界面接口.应 ...
- iOS开发中的错误整理,Changing the delegate of a tab bar managed by a tab bar controller is not allowed
iOS [错误:'Changing the delegate of a tab bar managed by a tab bar controller is not allowed.'] 错误:'Ch ...
- iOS学习32之UIKit框架-可视化编程-XIB
1. Interface Builder 可视化编程 1> 概述 GUI : 图形用户界面(Graphical User Interface, 简称GUI, 又称图形化界面) 是指采用图形方式显 ...
- 基础框架Fundation和UIkit框架的定义和使用
Foundation 框架为所有应用程序提供基本的系统服务 您的应用程序以及 UIKit 和其他框架,都建立在 Foundation 框架的基础结构之上.Foundation 框架提供许多基本的对象类 ...
随机推荐
- Spring Boot 2 实践记录之 MySQL + MyBatis 配置
如果不需要连接池,那么只需要简单的在pom文件中,添加mysql依赖: <dependency> <groupId>mysql</groupId> <arti ...
- mac下的抓包工具 -- Charles
# 背景 换了mac电脑,
- .NET 任务调度Quartz系列(1)——自建定时任务
在我们平时项目中经常会遇到定时任务,比如定时同步数据,定时备份数据,定时统计数据等,定时任务我们都知道使用Quartz.net,此系列写的也是Quartz,但是在此之前,我们先用其他方式做个简单的定时 ...
- day74天中间件介绍
一. importlib settings 执行结果: 两个process_request process_response按照注册顺序的倒叙进行执行 PROCESS_VIEW Process_v ...
- pandas 对dataframe一列中某些值进行处理
https://github.com/Bifzivkar/Boutique-Travel-Services-Predict/blob/master/feature/5_extract_feature. ...
- window7下Python安装
去python官网下载软件,https://www.python.org. 选择dowloads-->windows,选择稳定版python3.5.2,x86表示32位操作系统,x86-64表示 ...
- JS弹出对话框函数alert(),confirm(),prompt()
1,警告消息框alert() alert 方法有一个参数,即希望对用户显示的文本字符串.该字符串不是 HTML 格式.该消息框提供了一个“确定”按钮让用户关闭该消息框,并且该消息框是模式对话框,也就是 ...
- 操作实践题 - HTML 列表综合应用
通过对列表的综合应用,编写如下效果网页: 解答: <html> <head> <title>操作实践题</title> <meta http-eq ...
- github本地分支合并到线上主分支
如果是在本地index-swiper分支上,已经写好了那么: 1,git add . //提交到本地缓冲区 2,git commit -m "project init ...
- 01-Python的基础知识1
基础即常识. - Python的对象模型 - Python中一切皆对象. - 内置对象:数字,字符串,列表,元组,集合等等. - 基本输入 - 基本模式 变量 = input("提示字 ...