美文网首页
UI基础9 UITableView

UI基础9 UITableView

作者: SoManyDumb | 来源:发表于2016-07-26 00:12 被阅读13次

    UITableView

    UITableView的两种样式

    • UITableViewStylePlain
    • UITableViewStyleGrouped

    如何展示数据

    • UITableView需要一个数据源(dataSource)来显示数据
    • UITableView会向数据源查询一共有多少行数据以及每一行显示什么数据等
    • 没有设置数据源的UITableView只是个空壳
    • 凡是遵守UITableViewDataSource协议的OC对象,都可以是UITableView的数据源

    tableView展示数据的过程

    • 调用数据源的下面方法得知一共有多少组数据
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
    
    • 调用数据源的下面方法得知每一组有多少行数据
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
    
    • 调用数据源的下面方法得知每一行显示什么内容
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
    
    • tableView如何显示数据
      • 设置dataSource数据源
      • 数据源要遵守UITableViewDataSource协议
      • 数据源要实现协议中的某些方法
    /**
     *  告诉tableView一共有多少组数据
     */
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    
    /**
     *  告诉tableView第section组有多少行
     */
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    
    /**
     *  告诉tableView第indexPath行显示怎样的cell
     */
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    
    /**
     *  告诉tableView第section组的头部标题
     */
    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
    
    /**
     *  告诉tableView第section组的尾部标题
     */
    - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section
    

    tableView性能优化 - cell的循环利用方式1

    /**
     *  什么时候调用:每当有一个cell进入视野范围内就会调用
     */
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // 0.重用标识
        // 被static修饰的局部变量:只会初始化一次,在整个程序运行过程中,只有一份内存
        static NSString *ID = @"cell";
    
        // 1.先根据cell的标识去缓存池中查找可循环利用的cell
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
        // 2.如果cell为nil(缓存池找不到对应的cell)
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
        }
    
        // 3.覆盖数据
        cell.textLabel.text = [NSString stringWithFormat:@"testdata - %zd", indexPath.row];
    
        return cell;
    }
    

    tableView性能优化 - cell的循环利用方式2

    • 定义一个全局变量
    // 定义重用标识
    NSString *ID = @"cell";
    
    • 注册某个标识对应的cell类型
    // 在这个方法中注册cell
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 注册某个标识对应的cell类型
        [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
    }
    
    • 在数据源方法中返回cell
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        // 1.去缓存池中查找cell
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
        // 2.覆盖数据
        cell.textLabel.text = [NSString stringWithFormat:@"testdata - %zd", indexPath.row];
    
        return cell;
    }
    

    相关文章

      网友评论

          本文标题:UI基础9 UITableView

          本文链接:https://www.haomeiwen.com/subject/gulnjttx.html