美文网首页iOS 开发
用TableView的个人总结

用TableView的个人总结

作者: Mr丶炎 | 来源:发表于2016-05-11 19:39 被阅读126次

    1、tableView的边距
    2、tableView的常用方法
    3、cell的重用机制
    4、 自定义cell的方法
    5、 计算不同cell的高度

    TableView应该是非常常用的控件之一,要熟练运用!下面是一些开发过程中的小积累。 如果一个界面需要用到两个tableView,那么这两个表视图的数据源和代理可以给一个控制器, 用的时候,只要判断就好了
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        
        if (tableView == self.tableView) { // 左边的类别表格
            
            return self.types.count;
        }else { // 右边的用户表格
            
            return self.users.count;
        }
        
    }
    
    • 这个属性很好用, 可以调整tableview的边距(显示位置)
    // 设置inset
        self.automaticallyAdjustsScrollViewInsets = NO;
        self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
        self.userTableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
    
    • tableView的常用方法和属性

    一、 两个必须实现的方法, 必须实现数据源协议喔<UITableViewDataSource>

    /** 每一组显示多少个cell, 没有分组当然就默认一组咯 */
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
    
    /** 创建cell的方法 */
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
    
    

    二、 选中cell调用

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
    
    • cell 的常用方法和属性
      一、 说道cell那么就说下cell的重用
    // 因为每滑动一次,这里都要调用一次,所有用static就只会调用一次了,作为标记
      static NSString *ID = @"status";
      
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
      if (!cell) {
          // 如果闲置池里面没有就自己创建
          cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
      }
    return cell;
    

    二、很多时候我们需要自定义cell来满足自己的需求, 可以在storyboard中自定义也可以在xib中自定义

    • storyboard中给cell一个标识, 用到cell的时候直接去缓冲池里面找
    static NSString *ID = @"deal";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    return cell;
    
    • xib自定义cell, 也需要给cell一个标识,用的时候先注册,再使用
    [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([BSRecommendTypeTableViewCell class]) bundle:nil] forCellReuseIdentifier:typeCell];
    
     // 在缓存池中读取
      BSRecommendTypeTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:typeCell];
    
    return cell;
    
    • 加载xib的时候我们可以重写这个方法监听选中或取消选中
    // 重写selected方法, 可以监听cell的选中和取消选中
    - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
        [super setSelected:selected animated:animated];
    
        /**
         *  这个指示器什么时候隐藏呢,没有点击的时候隐藏
         */
        self.seletedIndicator.hidden = !selected;
    
        self.textLabel.textColor = selected ? BSColor(219, 21, 26) : BSColor(78, 78, 78);
    }
    
    • 加载xib会来这个方法, 可以在这里做些事情
    // 创建xib的时候调用该方法
    - (void)awakeFromNib {
        // 背景颜色
        self.backgroundColor = BSColor(244, 244, 244);
     
        self.seletedIndicator.backgroundColor = BSColor(219, 21, 26);
    }
    
    • 重新布局子控件, 复写layoutSubviews
    // 布局子控件
    - (void)layoutSubviews {
        [super layoutSubviews];
        
        self.textLabel.y = 2;
        self.textLabel.height = self.contentView.height - 2 *self.textLabel.y;
    }
    


    我们有时候需要这样的cell,很明显是有间隙的
    Snip20160513_1.png

    怎么做呢!有很多方法,这里我觉得最简单的便是拦截frame,灰色的就是一个背景图片,如果高度变成 1 不就是分割线了么!

    
    // 重写frame拦截尺寸
    - (void)setFrame:(CGRect)frame {
        
        // 左右的空隙
        frame.origin.x = 10;
        
        frame.size.width -= 2 * frame.origin.x;
        
        // 不用添加任何控件,实现分割线
        frame.size.height -= 10;
        
        // 调用父类要写在后面
        [super setFrame:frame];
     
    }
    

    计算不同cell的高度, cell中的内容是丰富多彩的,那么计算高度,要知道每个内容的不同高度来决定cell的高度。下面是根据文字的高度,得到cell的高度

    // 文字的最大尺寸
            CGSize maxSize = CGSizeMake([UIScreen mainScreen].bounds.size.width - 4 * BSTopicCellMargin, MAXFLOAT);
            
            CGFloat textH = [self.text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:12]} context:nil].size.height;
    

    相关文章

      网友评论

        本文标题:用TableView的个人总结

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