您的位置:首页 > 产品设计 > UI/UE

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】

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: