09-UIKit(UICollectionViewController、UITabBarController)
目录:
一、UICollectionViewController
1 概念:从ios6开始,是一个变异的TableViewController,可以将其认为是一个二维表视图。
2 布局特点:Flow Layout流式布局
3 和TableViewController比较:
TableViewController CollectionViewController
section section
row item
cell cell
cell:UITableViewCell或子类cell:UICollectionViewCell
协议:
TableViewDatasource CollectionViewDatasource
三问 三问
TableViewDelegate CollectionViewDeletate
一响应 一响应
[1-CollectionViewController]
步骤:
1)创建MXCollectionViewController:UICollectionViewController(xib)
2)改变View的类型:
将xib中的view删除,在托一个UICollectionView,进行如下设置,将UICollectionView的datasource和delegate设置为Files Owner,将Files Owner中的view连线到UICollectionView
3)创建自定义的Cell类MXCell:UICollectionViewCell
4)创建自定义的cell的xib文件,托一个UICollectionViewCell到xib中,设置72X72加lablel控件
5)将Cell的xib文件的类型设置成MXCell,在将cell中的label拖成MXCell类的属性
6)设置UICollectionView的尺寸,每一个cell的大小,cell之间的间距,每一个section的内边距,以及CollectionView的头和脚高度
7)回答三问,多少区,每区多少个条目,每个条目的cell是什么样
二、UITabBarController(标签控制器)
1 控制器的控制器
2 创建
1)创建时经常需要先创建出要包含的多个继承自UIViewController的VC
2)用TabBarController包含这些VC
【2-tabBarController】
UITabBarController *tab = [[UITabBarController alloc] init]; MXFirstViewController *first = [[MXFirstViewController alloc] initWithNibName:@"MXFirstViewController" bundle:nil]; MXSecondViewController *second = [[MXSecondViewController alloc] initWithNibName:@"MXSecondViewController" bundle:nil]; MXThreeViewController *three = [[MXThreeViewController alloc] initWithNibName:@"MXThreeViewController" bundle:nil]; tab.viewControllers = @[first,second,three]; self.window.rootViewController = tab;
3)tabBar中的按钮title和image需要配置:
在具体的VC中设置属性:
self.title 设置标题(一般显示在navigation上)
self.tabBarItem.title 设置tabBar标题
self.tabBarItem.image 设置tabBar图片
注意:先设置title,在设置tabBarItem.title,图片必须设置
注意:如果属性设置在viewDidLoad中运行的时候,第二第三个view的属性会看不到,因为只有点击这些页面的时候才会加载viewDidLoad,所以这些属性需要在每个VC创建的时候设置,具体在- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil中设置。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization self.tabBarItem.title = @"hellA"; self.tabBarItem.image = [UIImage imageNamed:@""]; } return self; }
3 tabBar和navigation一起使用
rootViewController是tabBar
【3-tabBar-naviga】
1)之间的关系:
MXFirstViewController *first = [[MXFirstViewController alloc] initWithNibName:@"MXFirstViewController" bundle:nil]; MXSecondViewController *second = [[MXSecondViewController alloc] initWithNibName:@"MXSecondViewController" bundle:nil]; UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:first]; UINavigationController *navi2 = [[UINavigationController alloc] initWithRootViewController:second]; UITabBarController *tab = [[UITabBarController alloc] init]; tab.viewControllers = @[navi,navi2]; self.window.rootViewController = tab;
2)推新界面时,push时默认新界面会保留TabBar,如果不希望看见,在push之前可以设置隐藏,present推新界面时,新界面不会出现tabBar。
- (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(pushTap)]; // Do any additional setup after loading the view from its nib. } - (void)pushTap{ MXTableViewController *table = [[MXTableViewController alloc] initWithNibName:@"MXTableViewController" bundle:nil]; table.hidesBottomBarWhenPushed = YES;//隐藏tabBar [self.navigationController pushViewController:table animated:YES]; }
三、视图和试图控制器的生命周期
1 viewController对象本身的创建和销毁
1)创建
init initWithXxx initWithNibName(使用xib初始化) initWithCoder(使用storyBoard初始化)
2)属性
私有属性@property(nonatomic,strong)NSMutableArray *data;一般会在init方法中创建此属性对应的对象。最好是在getter方法中创建,这样就只有需要使用此属性时才创建此对象(Lazy loading延迟加载)
公开属性一般是由外面赋值进来的,或是只读的。
3)释放
dealloc方法,在ARC下,此方法一般不太关注。
2 viewController对象的生命周期
1)视图创建(显示之前加载nib)
-> viewDidLoad 加载nib文件后调用,经常用于将数据赋值到显示界面的控件上
-> viewWillAppear 视图在显示之前调用,经常将更新界面的代码写在此处
2)视图可见
-> viewDidAppear 视图显示之后调用,当界面播放动画时用
-> viewWillDisappear 视图即将消失时调用
3)视图不可见
-> viewDidDisappear 视图消失后调用
如果在viewWillDisappear/ viewDidDisappear中分配某些资源,在这里释放这些资源
--------------特殊情况(了解)--------------
->didReceiveMemoryWarning系统内存低时调用
-> viewDidUnload 在ios6之后不再调用
【4-viewController-LifeCycle】
3 应用程序的生命周期
0)not running 非运行状态
1)前台foreground
inactive 前台非活动状态
active 活动状态
2)后台background
3)suspended挂起状态
【4-viewController-LifeCycle】
// 应用启动时调用,初始化根视图控制器,在storyBoard中可能没有任何代码 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions // 当程序从活动状态进入非活动状态时调用,比如有电话或短信进来,或用户按下home // 在这个方法中你可以暂停正在处理的任务,禁用计时器,OpenGL ES帧率停掉,如果是游戏,在此方法中暂停游戏的运行resignActive辞去活动状态 - (void)applicationWillResignActive:(UIApplication *)application { NSLog(@"非活动状态"); } // 释放一些共享资源,保存用户数据,将计时器设为无效,保存应用程序的状态信息,以便将来使用 // 如果你的应用程序支持后台执行,当用户退出程序时会调用此方法enterBackground进入后台 - (void)applicationDidEnterBackground:(UIApplication *)application { NSLog(@"进入后台"); } // 将要进入前台时调用,从后台过度到非活动状态,可以撤销进入后台时的一些改变enterForeground进入前台 - (void)applicationWillEnterForeground:(UIApplication *)application { NSLog(@"进入前台"); } // 从非活动状态进入活动状态时调用,重新开始暂停的任务,如果应用程序是从后台进入的可以再次更新界面becomeActive变为活动 - (void)applicationDidBecomeActive:(UIApplication *)application { NSLog(@"活动状态"); } // 应用程序终止时调用,可以保存一些数据,terminate终止 - (void)applicationWillTerminate:(UIApplication *)application { NSLog(@"终止程序"); }
四、其他控件
UISegmentedControl(分割)、
UIActivityIndicatorView(转圈)、
UIProgressView(进度条)
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *inditor; @property (weak, nonatomic) IBOutlet UIProgressView *progress; - (IBAction)segmenClick:(UISegmentedControl *)sender { NSInteger index = sender.selectedSegmentIndex; if (index == ) { [self.inditor stopAnimating]; self.progress.progress = 0.2; }else if(index == ){ [self.inditor startAnimating]; } NSLog(@"%d",index); }
09-UIKit(UICollectionViewController、UITabBarController)的更多相关文章
- (转)Linux 系统性能分析工具图解读(一、二)
Linux 系统性能分析工具图解读(一.二) 原文:http://oilbeater.com/linux/2014/09/08/linux-performance-tools.html 最近看了 Br ...
- C# 中使用不安全代码(unsafe、指针)实践
命题 根据指定的字符集合(字典),按排列组合的规则(允许重复),生成指定长度的所有字符串.如下代码: class Program { static void Main(string[] args) { ...
- 【Java】流程控制 - 顺序结构、 选择(分支)结构(单分支、双分支、多分支、嵌套)、循环结构(for、while、do...while)、跳转语句(break、continue)
流程控制语句结构 文章目录 流程控制语句结构 一. 顺序结构 1. 输出语句 2. 输入语句 3.code 二.复合语句 三. 分支结构 1. 条件判断 1.单分支结构 2.双分支结构 3.多分支结构 ...
- Java——搭建自己的RESTful API服务器(SpringBoot、Groovy)
这又是一篇JavaWeb相关的博客,内容涉及: SpringBoot:微框架,提供快速构建服务的功能 SpringMVC:Struts的替代者 MyBatis:数据库操作库 Groovy:能与Java ...
- iOS 小谈开发者中的个人、组织(公司、企业)账号
苹果对开发者主要分为3类:个人.组织(公司.企业).教育机构.即: 1.个人(Individual) 2.组织(Organizations) 组织类又分为2个小类: (1)公司(Company) (2 ...
- 那点你不知道的XHtml(Xml+Html)语法知识(DTD、XSD)
什么是XHtml: 摘录网上的一句话,XHTML就是一个扮演着类似HTML的角色的XML. XHtml可当模板引擎应用: CYQ.Data 框架里有一套XHtmlAction模板引擎, 应用在QBlo ...
- Python开发:环境搭建(python3、PyCharm)
Python开发:环境搭建(python3.PyCharm) python3版本安装 PyCharm使用(完全图解(最新经典))
- [UML]UML系列——类图class的关联关系(聚合、组合)
关联的概念 关联用来表示两个或多个类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的应用. 程序演示:关联关系(code/assocation) 假设:一个公司 ...
- 联合体union和大小端(big-endian、little-endian)
1.联合体union的基本特性——和struct的同与不同 union,中文名“联合体.共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以 ...
随机推荐
- openstack之cinder
一.cinder概述: 1.F版之前,并没有cinder,对应的组件为nova-volume:以Rest API的形式提供服务 2.cinder目标: 减少nova的复杂性,降低nova的负载,支持多 ...
- Angular JS 学习笔记(一)
1. 菜鸟教程:http://www.runoob.com/angularjs/angularjs-tutorial.html 2. Angular JS中文网:http://www.apjs.net ...
- Android滑动事件冲突
首先,我们假设这样一个场景:一个ViewPager里面嵌套一个ViewPager,内部滑动方向和外部滑动方向一样时,该怎么解决这一冲突呢? 针对滑动冲突这里给出两种解决方案:外部拦截法,内部拦截法. ...
- [转载]CSS 创作指南(Beta)(css规范)
当年还在纠结各种规范的时候,不知道从哪里翻到这个,就让我脱离了css这个规范的苦海了... 反正就是团队和项目合作说的算,选择合适的进行使用就可以了,见到合适的文章,我也会转载过来的 来源 https ...
- android studio 安装与环境搭建
转摘自:http://blog.csdn.net/zhanghefu/article/details/9286123 第一章 andriod studio 安装与环境搭建 一.Android St ...
- PHP 时间和日期 总结
PHP 时间戳 UNIX 时间戳(timestamp)是 PHP 中关于时间日期一个很重要的概念,它表示从 1970年1月1日 00:00:00 到当前时间的秒数之和. 可以使用time()函数来获取 ...
- MYSQL 好文章集锦
比较细致的讲解MySQL数据库的数据结构以及实现原理 MySQL索引背后的数据结构及算法原理 MySQL的InnoDB索引原理详解 MySQL索引原理及慢查询优化 持续更新,快乐学习.
- HDU p1294 Rooted Trees Problem 解题报告
http://www.cnblogs.com/keam37/p/3639294.html keam所有 转载请注明出处 Problem Description Give you two definit ...
- BZOJ 1603: [Usaco2008 Oct]打谷机
题目 1603: [Usaco2008 Oct]打谷机 Time Limit: 5 Sec Memory Limit: 64 MB Description Farmer John有一个过时的打谷机( ...
- 写了交互给后台后来不能用?bug多多多又找不到文件效率低?工作流程帮你优化起来~~~~
前端工作流程(多方交互篇) 新的网页: 1.跟美工沟通,跟产品沟通,跟后台沟通.前两者主要是页面样式.后者主要是表单交互.用哪个框架之类的. 2.实现.(写清楚哪块是用什么验证方式的)→ 给后台. 3 ...