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)同样可以 ...
随机推荐
- 解决外贸电商难题,PayPal中国外贸电商大会圆满礼成
在全球经济一体化的背景下,越来越多的中国企业将目光转移到了海外.对中国的企业而言,要想将生意做到海外大致有两种方法可供选择,一是到海外设立分支机构或者分公司,二是通过外贸电子商务平台实现交易. ...
- Android 中文API (66) —— BluetoothClass.Device
前言 本章内容是android.bluetooth.BluetoothClass.Device,为Android蓝牙部分的章节翻译,版本为Android 2.3 r1,翻译来自中山大学的" ...
- python 面试相关
python单例模式: Python真的需要单例模式吗?我指像其他编程语言中的单例模式. 答案是:不需要! 因为,Python有模块(module),最pythonic的单例典范.模块在在一个应用程 ...
- asp.net根据模版生成Word小记
最近遇到一个问题,客户提了一个新的需求,客户想要将显示在网页上的数据导出成Word进行套打,由于之前没有接触过这一块的内容,自己写的系统也没有使用这种功能,现在重头学习. 具体思路: 1.先制作Wor ...
- linker command failed with exit code 1 (use -v to see invocation),经典Xcode编译错误的出现和解决!
linker command failed with exit code 1 (use -v to see invocation)这个肯定是个xcode编译运行的时候经典的报错了. 这个问题曾经在我的 ...
- jQuery+Ajax+Jsp做二级级联
终于弄懂了这个级联,我去!必须得在博客记下来. 1, JS代码: $(document).ready(function(){ $("#select1").change(functi ...
- IT第二天 - JAVA环境的配置、Hello的编写
IT第二天 上午 HTML的一些讲解 下午 JDK的安配置 JAVA语法的注意事项 Hello的编写 晚上 作业 对println的应用 笔记 1.Classpath环境变量的配置:因为DOS对于文件 ...
- prim模板
]; int n; ][]; ]; int prim(){ int i,j,mi,v; ;i<n;i++){ d[i]=map[][i]; vis[i]=; } ;i<=n;i++){ m ...
- 第一种:NStread
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- struts2的总体回想(ACTION、拦截器、值栈、OGNL表达式、ModelDriven方案等)
ValueStack:struts2的一个存放数据的数据结构(核心) ValueStack大致能够理解为:由Map和对象栈组成 ValueStack作用范围:一个请求,用它来取代request的作用域 ...