tableView小结

作者: 只敲代码不偷桃 | 来源:发表于2016-05-11 14:51 被阅读146次
    tableView点击cell之后不会一直有背景效果
    - [tableView deselectRowAtIndexPath:indexPath animated:NO]; 
    - cell.selectionStyle = UITableViewCellSelectionStyleNone;(始终没有效果)
    
    • 刷新特定行的cell
    [self.tableView reloadRowsAtIndexPaths:@[
            [NSIndexPath indexPathForRow:0 inSection:0],
            [NSIndexPath indexPathForRow:1 inSection:0]
            ]
            withRowAnimation:UITableViewRowAnimationLeft];
    
    • 插入特定行数的cell
    [self.tableView insertRowsAtIndexPaths:@[
            [NSIndexPath indexPathForRow:0 inSection:0],
            [NSIndexPath indexPathForRow:1 inSection:0]
            ]
            withRowAnimation:UITableViewRowAnimationLeft];
    
    • 删除特定行数的cell
    [self.tableView deleteRowsAtIndexPaths:@[
            [NSIndexPath indexPathForRow:0 inSection:0],
            [NSIndexPath indexPathForRow:1 inSection:0]
            ]
            withRowAnimation:UITableViewRowAnimationLeft];
    

    非等高的cell(方法一: 用model保存cell的高度)

     - 在模型中增加一个cellHeight属性,用来存放对应cell的高度
     - 在cell的模型属性set方法中调用[self layoutIfNeed]方法强制布局,然后计算出模型的cellheight属性值
     - 在控制器中实现tableView:estimatedHeightForRowAtIndexPath:方法,返回一个估计高度,比如200
     - 在控制器中实现tableView:heightForRowAtIndexPath:方法,返回cell的真实高度(模型中的cellHeight属性)
    
    • 在�Model的.h文件中
    /** cell的高度 */
    @property (assign, nonatomic) CGFloat cellHeight;
    
    • 在自定义的cell的.h文件中声明Model
    /** 模型数据 */
    @property (nonatomic, strong) NBStatus *status;
    
    • 在自定义的cell的.m文件中,模型属性的set方法中
    - (void)setStatus:(NBStatus *)status
    {
        _status = status;
        
       //各种赋值操作.........
        
        // 强制布局
        [self layoutIfNeeded];
        
        // 计算cell的高度
         status.cellHeight = ... + 10; 
    }
    
    • 在控制器的.m文件中
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return self.statuses.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NBStatusCell *cell = [NBStatusCell cellWithTableView:tableView];
        cell.status = self.statuses[indexPath.row];
        return cell;
    }
    /**返回每一行的高度*/
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NBStatus *staus = self.statuses[indexPath.row];
        return staus.cellHeight;
    }
    /**
    * 返回每一行的估计高度
     * 只要返回了估计高度,那么就会先调用tableView:cellForRowAtIndexPath:方法创建cell,再调用tableView:heightForRowAtIndexPath:方法获取cell的真实高度*/
    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return 200;
    }
    

    非等高的cell(方法二: 用字典保存cell的高度)

    /** 存放所有cell的高度 */
    @property (strong, nonatomic) NSMutableDictionary *heights;
    /////////////////
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return self.statuses.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NBStatusCell *cell = [NBStatusCell cellWithTableView:tableView];
        cell.status = self.statuses[indexPath.row];
        // 强制布局
        [cell layoutIfNeeded];
        // 存储高度
        self.heights[@(indexPath.row)] = @(cell.height);
        return cell;
    }
    
    #pragma mark - 代理方法
    /**
     *  返回每一行的高度
     */
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return [self.heights[@(indexPath.row)] doubleValue];
    }
    
    /**
     * 返回每一行的估计高度
     * 只要返回了估计高度,那么就会先调用tableView:cellForRowAtIndexPath:方法创建cell,再调用tableView:heightForRowAtIndexPath:方法获取cell的真实高度
     */
    - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return 200;
    }
    

    当然也可以用用一个FrameModel来保存高度,基本原理都差不多,本文主要是注意那个估计高度,因为实现那个方法只会,tableView的代理方法的顺序会发生变化

    相关文章

      网友评论

        本文标题:tableView小结

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