zoukankan      html  css  js  c++  java
  • 05-UIKit(UITableViewController)

    目录:

    一、UITableViewController(表视图控制器)

    二、委托协议

    三、tableview工作过程(三问一响应)

    四、UITableViewCell

    回到顶部

    一、UITableViewController(表视图控制器)

    1 table:ios中的表格指一维半的表格,一行一列,而一列又分多个区

    2 最常用的一个视图控制器,用于按照列表的方式显示和操作大量的数据时使用

    3 好处,布局管理,不需要计算坐标,自动判断事件,自动进行内存管理,自动设置数据值。

    4 创建UITableViewController

    新建一个分类,继承自UITableViewController

    5  tableview的基本信息

    uiviewcontroller  ->  uiview self.view

    uitableviewcontroller ->uitableview self.tableview

    tableview style : plain 普通表视图group分组表视图

    separator 行间分隔符

    内部结构:

    table view的内部结构

    table view表头

    section分区 section header分区头 rows行

    section分区尾

    table footer表尾

    有些属性可以点.出来

    回到顶部

    二、委托协议

    数据源协议UITableViewDataSource,事件处理协议UITableViewDelegate实现协议,会让我们自己的tableviewcontroller对象来遵守这两个协议

    DataSource中的方法

    //返回区域数

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    {

        return 3;

    }

    //返回区域行数 多次调用  每个区域都会调 有3个区就调3次

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    {

        if (section == 0) {

            return 3;

        }else if(section == 1){

            return 5;

        }else{

            return 20;

        }

    }

    NSIndexPath 保存区域section、行row,

    回到顶部

    三、tableview工作过程(三问一响应)

    三问:几个区(区号从0开始),

    每个区几行,nsindexpath本身是一个集合,uikit对类增加了分类,分类中有两个属性.section保存的区域是多少

    .row保存的是行

    每一行什么内容

    //创建一个uitablecell 返回内容 没一行都会调用 有多少行调多少次
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        //cell重用
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        }
        
        // Configure the cell...
        //1区的第0行text为heheh,其他为hello
        //section表示区域 row表示行数
        if (indexPath.section == 1 && indexPath.row == 0) {
            cell.textLabel.text = @"heheh";
        }else{
            //文本
            cell.textLabel.text = @"hello";
            //图片
            cell.imageView.image = [UIImage imageNamed:@"cellImage"];
            //详细信息
            cell.detailTextLabel.text = @"detail ,,,";//默认不显示,把73行initWithStyle值改为UITableViewCellStyleSubtitle
        }
        
        return cell;
    }

    NSIndexPath集合类,保存一些路径

    回到顶部

    四、UITableViewCell

    1 是一个视图(uiview的子类)用来显示tableview中的一行

    在此cell视图中,包含了一些子视图,textlabel(是uilable类型)imageview(是uiimageview类型)deatailtextlabel( 是uilabel类型)

    2 cell的重用

    cell的重用是如果显示14个textLabel下面的textlabel会重用这14个不会创建新的cell

    从tabelview对象中指定的cell队列(identifier)中,获取可以重复使用的cell对象(现在没有显示在界面上的cell对象),如果没有找到可重复使用的,那返回nil,此时我们就创建新的cell对象,创建新cell对象时要指定identifier,当此cell出了界面后,会根据其identifier的值放到对应的队列中,以供将来重复使用

    3 tableviewcontroller的model

    model可以是数组可以是对象

    detailTextLabel默认是不显示的,可以修改飘红的地方以显示

    if (cell == nil) {

            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

        }

    //黄色目录里面的内容直接写文件名 不用写路径名

    //蓝色目录里面的内容要写路径加文件名才能用

        NSString *photoName = [NSString stringWithFormat:@"01%d.png",indexPath.row];

        cell.imageView.image = [UIImage imageNamed:photoName];

    作业:

    1. 根据作业资源3,实现TMusic项目中的开始欢迎界面。

       使用UIScrollView, UIImageView

    关键代码:

    scrollView.pagingEnabled = YES;

    scrollView.contentSize = CGSizeMake(self.view.frame.size.width*5, self.view.frame.size.height);

           注意各个对象的创建:

    UIImage *image = [UIImage imageNamed:@"Welcome_3.0_1.jpg"];

    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

    UIScrollView *scrollView = [[UIScrollView alloc] init];

    2. 最后一个Demo,改:

         数组中放的不再是NSString, 而是MXPhoto类的对象

         MXPhoto类有三个属性:

             图片的名字 

             图片的文件名  

             图片的简介 

     

  • 相关阅读:
    Java进程线程理解
    Java String练习题及答案
    代理服务器原理(转)
    FTP服务器原理(转)
    SMTP协议及POP3协议-邮件发送和接收原理(转)
    集合框架的类和接口均在java.util包中。 任何对象加入集合类后,自动转变为Object类型,所以在取出的时候,需要进行强制类型转换。
    Java集合框架顶层接口collectiion接口
    java多态--算法实现就是多态
    项目安排
    Scala从零開始:使用Intellij IDEA写hello world
  • 原文地址:https://www.cnblogs.com/yangmx/p/3516443.html
Copyright © 2011-2022 走看看