zoukankan      html  css  js  c++  java
  • 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 }

     

  • 相关阅读:
    ios UIWebView截获html并修改便签内容(转载)
    IOS获取系统时间 NSDate
    ios 把毫秒值转换成日期 NSDate
    iOS  如何判断当前网络连接状态  网络是否正常  网络是否可用
    IOS开发 xcode报错之has been modified since the precompiled header was built
    iOS系统下 的手机屏幕尺寸 分辨率 及系统版本 总结
    iOS 切图使用 分辨率 使用 相关总结
    整合最优雅SSM框架:SpringMVC + Spring + MyBatis 基础
    Java面试之PO,VO,TO,QO,BO
    Notes模板说明
  • 原文地址:https://www.cnblogs.com/yangmx/p/3526136.html
Copyright © 2011-2022 走看看