• 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 }

     

  • 相关阅读:
    换上 SansForgetica-Regular 字体,增加记忆能力
    Windows和Linux查看端口占用
    安卓打开远程调试(免root)
    debian系统解决包依赖问题的神器aptitude
    C# WinForm 实现窗体淡入淡出
    [图文教程]VS2017搭建opencv & C++ 开发环境
    C# 调用Tesseract实现OCR
    数据库工具链接阿里云MySQL数据库
    【转载】如何选择MySQL存储引擎
    java Long、Integer 、Double、Boolean类型 不能直接比较
  • 原文地址:https://www.cnblogs.com/yangmx/p/3526136.html
Copyright © 2020-2023  润新知