• iOS--UITableView 显示二级菜单


      UITableView上显示二级三级菜单的demo有很多,这里展示一个简单易复用的。

    效果图:

    代码:原理就是section的头作为展示的一级cell,section里的cell作为二级cell,通过section的状态(YES or NO)来控制是否显示section里的cell

    #import "MyEquipmentViewController.h"
    #import <Masonry.h>
    #import "MyEquipmentCell.h"
    #import "EquipmentDeatilViewController.h"
    
    
    @interface MyEquipmentViewController ()
    {
        BOOL status[10]; //记录每个单元格的状态   默认no闭合
    }
    @end
    
    @implementation MyEquipmentViewController
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        self.view.backgroundColor = [UIColor colorWithRed:239/255.0 green:241/255.0 blue:241/255.0 alpha:1];
         
        //tableView
        self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(10, 64, ScreenWidth-20, ScreenHeight-64) style:UITableViewStyleGrouped]; //采用group分组样式
        self.tableView.delegate = self;
        self.tableView.dataSource = self;
        self.tableView.backgroundColor = [UIColor colorWithRed:239/255.0 green:241/255.0 blue:241/255.0 alpha:1];
        [self.view addSubview:self.tableView];
        //默认第一个分组是打开的
        status[0] = YES;
    }
    
    #pragma mark------tableview处理
    //三个分组
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
        
        return 3;
        
    }
    //每个分组的行数
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
        
        BOOL closeAge = status[section];
        //关闭显示为0行
        if (closeAge == NO) {
            return 0;
        }
        
        return 3;
    }
    
    //UITableViewCell
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        
        static NSString *cell_id = @"cell_id";
        MyEquipmentCell *cell = [tableView dequeueReusableCellWithIdentifier:cell_id];
        if (cell == nil) {
            
            cell = [[MyEquipmentCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cell_id];
            cell.backgroundColor = [UIColor whiteColor];
            cell.textLabel.textColor = [UIColor grayColor];
        }
        cell.label.text = @"设备名称1";
        return cell;
    }
    //自定义section的header view
    - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{
        
        UIControl *titileView = [[UIControl alloc] initWithFrame:CGRectZero];
        titileView.tag = section;
        [titileView addTarget:self action:@selector(sectionAction:) forControlEvents:UIControlEventTouchUpInside];
        //设置  头视图的标题什么的
        UIImageView *firstImageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 5, 30, 30)];
        firstImageView.backgroundColor = [UIColor redColor];
        firstImageView.image = [UIImage imageNamed:@"share.png"];
        [titileView addSubview:firstImageView];
        
        UILabel *titleLable = [[UILabel alloc] initWithFrame:CGRectMake(25+30, 10, 100, 30)];
        titleLable.backgroundColor = [UIColor clearColor];
        titleLable.textColor = [UIColor blackColor];
        titleLable.font = [UIFont systemFontOfSize:18];
        titleLable.text = @"设备组1";
        [titleLable sizeToFit];
        [titileView addSubview:titleLable];
        
        UIImageView *lastImageView = [[UIImageView alloc] initWithFrame:CGRectMake(ScreenWidth-30-20, 10, 30, 30)];
        lastImageView.backgroundColor = [UIColor redColor];
        lastImageView.image = [UIImage imageNamed:@"cellIndat"];
        [titileView addSubview:lastImageView];
        
        return titileView;
    }
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
        
        return 44;
    }
    //点击section的header view的方法实现,保存当前section的闭合状态
    - (void)sectionAction:(UIControl *)control{
        
        NSInteger section = control.tag;
        
        status[section] = !status[section];
        
        NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:section];
        
        [_tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationFade]; //刷新制定单元格
        
    }
    //点击cell
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
        
        //选中单元格的表现
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
        [self.navigationController pushViewController:[[EquipmentDeatilViewController alloc] init] animated:YES];
    }
    
    //section的header view的高度
    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
        
        return 44;
  • 相关阅读:
    模板实参演绎
    模板实例化
    模板中的名称
    友元函数在类中的声明在外围是不可见的
    C++ 宽字符(wchar_t)与窄字符(char)的转换
    ImageButton如何让图片按比例缩放不被拉伸
    C++模板实例化(1)
    android开发之GenyMotion与intelliJ的配置
    jacoco报告表头注释
    Spring源码工具类之StringUtils
  • 原文地址:https://www.cnblogs.com/zhangshan/p/5313566.html
Copyright © 2020-2023  润新知