09-UIKit(UICollectionViewController、UITabBarController)
2014-01-19 19:41
337 查看
目录:
一、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】
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中设置。
3 tabBar和navigation一起使用
rootViewController是tabBar
【3-tabBar-naviga】
1)之间的关系:
2)推新界面时,push时默认新界面会保留TabBar,如果不希望看见,在push之前可以设置隐藏,present推新界面时,新界面不会出现tabBar。
回到顶部
三、视图和试图控制器的生命周期
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】
回到顶部
四、其他控件
UISegmentedControl(分割)、
UIActivityIndicatorView(转圈)、
UIProgressView(进度条)
一、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:@"1"]; } 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 == 1) { [self.inditor stopAnimating]; self.progress.progress = 0.2; }else if(index == 0){ [self.inditor startAnimating]; } NSLog(@"%d",index); }
相关文章推荐
- iOS开发之UITabBarController和UICollectionView的使用
- iOS开发之UITabBarController和UICollectionView的使用
- UITabBarController的使用方法、 UINavigationController的使用方法、 presentModalViewController的使用方法
- Swift - 重写UIKit框架类的init初始化方法(以UITabBarController为例)
- iOS开发之窥探UICollectionViewController(五) --一款炫酷的图片浏览组件
- UITabBarViewControllerDelegate
- 完全定制UITabBarViewController
- ios UICollectionViewController集合视图(三)
- ios UICollectionViewController集合视图(四)
- 多个ViewController 只隐藏一个ViewController的UINavigationBar 和UITabBar
- 猫猫学iOS 之微博项目实战(7)程序启动新特性用UICollectionViewController实现
- iOS - UICollectionViewController
- iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流
- 4.13 ViewFlipper切换view,ios:UITabBarController添加图标
- UITabbarViewController+Navigation框架下的子视图的跳转示例之一
- [BS-09] UITabBarController简单介绍
- Storyboard创建使用UICollectionViewController
- uicollectionviewcell automatically down -32 when self.navigationcontroller.navigationbar.translucent
- iOS实现UICollectionViewDataSource与Controller的分离
- [iOS]UINavigationController UITabBarController UITableView学习笔记