09-UIKit(UICollectionViewController、UITabBarController)

目录:

一、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】

09-UIKit(UICollectionViewController、UITabBarController)
 1     UITabBarController *tab = [[UITabBarController alloc] init];
 2 
 3     MXFirstViewController *first = [[MXFirstViewController alloc] initWithNibName:@"MXFirstViewController" bundle:nil];
 4 
 5     MXSecondViewController *second = [[MXSecondViewController alloc] initWithNibName:@"MXSecondViewController" bundle:nil];
 6 
 7     MXThreeViewController *three = [[MXThreeViewController alloc] initWithNibName:@"MXThreeViewController" bundle:nil];
 8 
 9     tab.viewControllers = @[first,second,three];
10 
11     self.window.rootViewController = tab;
09-UIKit(UICollectionViewController、UITabBarController)

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中设置。

09-UIKit(UICollectionViewController、UITabBarController)
 1 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
 2 
 3 {
 4 
 5     self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
 6 
 7     if (self) {
 8 
 9         // Custom initialization
10 
11         self.tabBarItem.title = @"hellA";
12 
13         self.tabBarItem.image = [UIImage imageNamed:@"1"];
14 
15     }
16 
17     return self;
18 
19 }
09-UIKit(UICollectionViewController、UITabBarController)

3 tabBar和navigation一起使用

rootViewController是tabBar

【3-tabBar-naviga】

1)之间的关系:

09-UIKit(UICollectionViewController、UITabBarController)
 1     MXFirstViewController *first = [[MXFirstViewController alloc] initWithNibName:@"MXFirstViewController" bundle:nil];
 2 
 3     MXSecondViewController *second = [[MXSecondViewController alloc] initWithNibName:@"MXSecondViewController" bundle:nil];
 4 
 5     UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:first];
 6 
 7     UINavigationController *navi2 = [[UINavigationController alloc] initWithRootViewController:second];
 8 
 9     UITabBarController *tab = [[UITabBarController alloc] init];
10 
11     tab.viewControllers = @[navi,navi2];
12 
13     self.window.rootViewController = tab;
09-UIKit(UICollectionViewController、UITabBarController)

2)推新界面时,push时默认新界面会保留TabBar,如果不希望看见,在push之前可以设置隐藏,present推新界面时,新界面不会出现tabBar。

09-UIKit(UICollectionViewController、UITabBarController)
 1 - (void)viewDidLoad
 2 
 3 {
 4 
 5     [super viewDidLoad];
 6 
 7     self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(pushTap)];
 8 
 9     // Do any additional setup after loading the view from its nib.
10 
11 }
12 
13 - (void)pushTap{
14 
15     MXTableViewController *table = [[MXTableViewController alloc] initWithNibName:@"MXTableViewController" bundle:nil];
16 
17     table.hidesBottomBarWhenPushed = YES;//隐藏tabBar
18 
19     [self.navigationController pushViewController:table animated:YES];
20 
21 }
09-UIKit(UICollectionViewController、UITabBarController)

回到顶部

三、视图和试图控制器的生命周期

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】

09-UIKit(UICollectionViewController、UITabBarController)
 1 // 应用启动时调用,初始化根视图控制器,在storyBoard中可能没有任何代码
 2 
 3 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 4 
 5 // 当程序从活动状态进入非活动状态时调用,比如有电话或短信进来,或用户按下home
 6 
 7 // 在这个方法中你可以暂停正在处理的任务,禁用计时器,OpenGL ES帧率停掉,如果是游戏,在此方法中暂停游戏的运行resignActive辞去活动状态
 8 
 9 - (void)applicationWillResignActive:(UIApplication *)application
10 
11 {
12 
13     NSLog(@"非活动状态");
14 
15 }
16 
17 // 释放一些共享资源,保存用户数据,将计时器设为无效,保存应用程序的状态信息,以便将来使用
18 
19 // 如果你的应用程序支持后台执行,当用户退出程序时会调用此方法enterBackground进入后台
20 
21 - (void)applicationDidEnterBackground:(UIApplication *)application
22 
23 {
24 
25     NSLog(@"进入后台");
26 
27 }
28 
29 // 将要进入前台时调用,从后台过度到非活动状态,可以撤销进入后台时的一些改变enterForeground进入前台
30 
31 - (void)applicationWillEnterForeground:(UIApplication *)application
32 
33 {
34 
35     NSLog(@"进入前台");
36 
37 }
38 
39 // 从非活动状态进入活动状态时调用,重新开始暂停的任务,如果应用程序是从后台进入的可以再次更新界面becomeActive变为活动
40 
41 - (void)applicationDidBecomeActive:(UIApplication *)application
42 
43 {
44 
45     NSLog(@"活动状态");
46 
47 }
48 
49 // 应用程序终止时调用,可以保存一些数据,terminate终止
50 
51 - (void)applicationWillTerminate:(UIApplication *)application
52 
53 {
54 
55     NSLog(@"终止程序");
56 
57 }
09-UIKit(UICollectionViewController、UITabBarController)

回到顶部

四、其他控件

UISegmentedControl(分割)、

UIActivityIndicatorView(转圈)、

UIProgressView(进度条)

09-UIKit(UICollectionViewController、UITabBarController)
 1 @property (weak, nonatomic) IBOutlet UIActivityIndicatorView *inditor;
 2 
 3 @property (weak, nonatomic) IBOutlet UIProgressView *progress;
 4 
 5 - (IBAction)segmenClick:(UISegmentedControl *)sender {
 6 
 7     NSInteger index = sender.selectedSegmentIndex;
 8 
 9     if (index == 1) {
10 
11         [self.inditor stopAnimating];
12 
13         self.progress.progress = 0.2;
14 
15     }else if(index == 0){
16 
17         [self.inditor startAnimating];
18 
19     }
20 
21     NSLog(@"%d",index);
22 
23 }
09-UIKit(UICollectionViewController、UITabBarController)

 

09-UIKit(UICollectionViewController、UITabBarController)

上一篇:IAP内购 返回的产品数量为0


下一篇:12-UIKit(View绘制、绘制曲线、绘制文字、贴图)