zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    【转】SQL SERVER函数无法执行对数据库的修改语句
    【转】用SQL实现树的查询
    HTML: < 和 > 是何方神圣
    ASP.NET的一些小问题
    C#的MD5哈希值计算
    高度自适应的CSS
    [转]WCF类型共享技巧
    使用.net的跟踪诊断来记录wcf消息
    【转】js frame 框架编程
    js点击button按钮跳转到页面代码
  • 原文地址:https://www.cnblogs.com/zhangshan/p/5313566.html
Copyright © 2011-2022 走看看