zoukankan      html  css  js  c++  java
  • iOS UITableView组头组尾小结

    项目中我们会经常用到UITableView组头组尾,下边简述下三种方式(组头为例,组尾同理)

    一、继承UITableViewHeaderFooterView(正规写法,有复用,适合组头频繁出现的情况)

    1、自定义SectionHeaderView

    @interface SectionHeaderView : UITableViewHeaderFooterView
    @property (nonatomic, strong) UIView *bgView;
    @property (nonatomic, strong) UILabel *titleLab;
    @end
    @implementation SectionHeaderView
    
    #pragma mark - System
    - (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier {
        self = [super initWithReuseIdentifier:reuseIdentifier];
        if (self) {
            [self initData];
            [self initUI];
        }
        return self;
    }
    
    #pragma mark - Init Data
    
    - (void)initData {
        
    }
    
    #pragma mark - Init UI
    
    - (void)initUI {
        
        UIView *bgView = [[UIView alloc]init];
        bgView.backgroundColor = XZWL_COLOR_FFFFFF;
        [self.contentView addSubview:bgView];
        [bgView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.edges.equalTo(self.contentView).insets(UIEdgeInsetsMake(0, 15, 0, 15));
        }];
        self.bgView = bgView;
        
        UIImageView *icon = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"career_addcustomer_sectionHead"]];
        [bgView addSubview:icon];
        [icon mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(bgView).offset(15);
            make.top.equalTo(bgView.mas_top).offset(17);
            make.width.height.mas_equalTo(20);
        }];
        
        self.titleLab = [[UILabel alloc]init];
        self.titleLab.textColor = XZWL_COLOR_333333;
        self.titleLab.font = FF_PFM_ICOME(16);
        self.titleLab.numberOfLines = 2;
        self.titleLab.lineBreakMode = NSLineBreakByCharWrapping;
        [bgView addSubview:self.titleLab];
        [self.titleLab mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(icon.mas_right).offset(15);
            make.right.equalTo(bgView.mas_right).offset(-15);
            make.height.mas_greaterThanOrEqualTo(20);
            make.top.equalTo(icon);
        }];
        
        UIView *line = [[UIView alloc]init];
        line.backgroundColor = XZWL_COLOR_EBEBEB;
        [bgView addSubview:line];
        [line mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.right.bottom.equalTo(bgView);
            make.height.mas_equalTo(0.5);
        }];
    }

    2、使用

    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
        SectionHeaderView *headerView = [tableView dequeueReusableHeaderFooterViewWithIdentifier:@"Test"];
        if (headerView == nil) {
            headerView = [[SectionHeaderView alloc] initWithReuseIdentifier:@"Test"];
            
        }
        
        headerView.titleLab.text = @"这是组头";
        return headerView;
    }
    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
        
        return 50;
    }

    二、自定义UIView(野路子,适合简单的组头,或者只出现一次,不重复使用的)

    1、创建

    @interface SectionHeader : UIView
    @property (nonatomic, strong) UILabel *titleLable;
    @end
    @implementation SectionHeader
    
    #pragma mark - System
    
    - (instancetype)initWithFrame:(CGRect)frame {
         
        self = [super initWithFrame:frame];
        if (self) {
            [self initData];
            [self initUI];
        }
        return self;
    }
    
    #pragma mark - Init Data
    
    - (void)initData {
     }
    
    #pragma mark - Init UI
    
    - (void)initUI {
        UILabel *msgLabel = [[UILabel alloc] init];
        msgLabel.frame = CGRectMake(15, 0, 200, 16);
        msgLabel.font = FF_PFM_ICOME(17);
        msgLabel.textColor = XZWL_COLOR_333333;
        self.backgroundColor = [UIColor clearColor];
        [self addSubview:msgLabel];
        self.titleLable = msgLabel;
    }
    
    
    @end

    2、使用

    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
        
       return 36;
    }
    
    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {

    //
    不要试图使用懒加载创建,然后动态改变title,这样会出问题,因为每一个组头都需要一个对象,正规写法是有复用机制的
    SectionHeader *tableSectionHederView = [[SectionHeader alloc] init];
    NSString
    *title = @"Test1"; if (section == 2) { title = @"Test2"; } tableSectionHederView.titleLable.text = title; return tableSectionHederView; }

    三、直接返回UIView(野路子,适合极简单的,与二相比,未封装,冗余)

    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
       return 44.0;
        
    }
    
    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
        
        UIView *headerView =  [[UIView alloc] init];
        headerView.frame = CGRectMake(0, 0, LL_ScreenWidth, 44.0);
        headerView.backgroundColor = THEME_COLOR_WHITE;
        headerView.clipsToBounds = YES;
        
        UILabel *titleLabel =  [[UILabel alloc] init];
        titleLabel.frame = CGRectMake(15, 13, LL_ScreenWidth - 150, 18);
        titleLabel.font = [UIFont systemFontOfSize:17];
        titleLabel.numberOfLines = 1;
        titleLabel.textColor = XZWL_COLOR_999999;
        titleLabel.textAlignment = NSTextAlignmentLeft;
        [headerView addSubview:titleLabel];
        
        UIView *lineView =  [[UIView alloc] init];
        lineView.frame = CGRectMake(0, 43.5, LL_ScreenWidth, 0.5);
        lineView.backgroundColor = XZWL_COLOR_EBEBEB;
        [headerView addSubview:lineView];
        
        return headerView;
    }

     

  • 相关阅读:
    POJ 1915 简单 广搜题
    poj 2479 最大子数段
    poj 1321 深搜题
    hdu 1024 最大子段和
    .net 学习总结
    [转]SharpDevelop源码分析 (二、主程序+隐藏的初始化)
    工作六年经验分享:软件工程师如何修炼(转)
    Ajax命名空间一个获取指定的页面元素的快捷方式——$get()
    [转]SharpDevelop代码分析 (一、序+基本概念)
    [转]SharpDevelop源码分析 (三、插件系统)
  • 原文地址:https://www.cnblogs.com/lijianyi/p/12844411.html
Copyright © 2011-2022 走看看