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)同样可以 ...
随机推荐
- WPF自学笔记
WPF使用哪几种元素作为顶级元素: 1. Window元素 2. Page元素(与Window元素类似,用于可导航的应用程序) 3. Application元素(定义应用程序资源和启动设置) PS:在 ...
- C#常用控件缩写
- ThinkPHP第五天(提交类型判定常量IS_POST等,错误页面种类,Model实例化方式,模板中使用函数,foreach循环,模板中.语法配置)
1.IS_GET.IS_POST.IS_PUT.IS_DELETE.IS_AJAX常量,方便快捷实现各个判断. 在Action类中还可以使用$this->isPost()等进行判断. 2.错误页 ...
- PHP学习笔记11-表单
处理GET请求 实现的功能是输入姓名后页面显示“Hello XXX” 创建html文件hello.html: <!DOCTYPE html> <html> <head l ...
- Python之路:Python各个器
1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退. 1.1 使用迭代器 ...
- Xamarin.Android开发实践(一)
原文:Xamarin.Android开发实践(一) 一.准备工作 1.创建一个空的解决方案,并命名为Phoneword 2.右击解决方案 新建->新建项目 并命名为Phoneword_Droid ...
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .
ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3 基于物品的协同过滤推荐算法--读"Item-Based ...
- Java chapter04-1
public class CPU { int speed; //获得speed的值 public void setSpeed(int m){ speed = m; } //返回speed的值 publ ...
- python字符串方法以及注释
转自fishC论坛:http://bbs.fishc.com/forum.php?mod=viewthread&tid=38992&extra=page%3D1%26filter%3D ...
- 在Update Panel 控件里面添加 File Upload 控件 上传文件
Detail Information:http://www.codeproject.com/Articles/482800/FileplusUploadplusinplusUpdateplusPane ...