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】

 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;

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

 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 }

3 tabBar和navigation一起使用

rootViewController是tabBar

【3-tabBar-naviga】

1)之间的关系:

 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;

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

 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 }

回到顶部

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

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】

 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 }

回到顶部

四、其他控件

UISegmentedControl(分割)、

UIActivityIndicatorView(转圈)、

UIProgressView(进度条)

 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 }

 

你可能感兴趣的:(Collection)