• tableviewcell折叠问题,(类似qq列表展开形式) 多个cell同时展开,OC版 和 Swift


    之前没有用到过这块,但是今天看到,就试了试,但是发现,网上的有的方法不能多个cell同时展开,只能一个一个的展开。

    我就尝试用用数组记录展开的标记的方法,功能实现了,

    直接上代码:

    //
    //  ViewController.m
    //  折叠tableview-Test
    //
    //  Created by abc on 16/7/26.
    //  Copyright © 2016年 LiuWenqiang. All rights reserved.
    //
    
    #import "ViewController.h"
    
    #define ALLWIDTH [UIScreen mainScreen].bounds.size.width
    #define ALLHEIGHT [UIScreen mainScreen].bounds.size.height
    
    @interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
    {
        UITableView*tableview;
        NSArray *dataArr;
        NSMutableArray *isOpenArr;
        
    }
    @end
    
    @implementation ViewController
    
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        tableview = [[UITableView alloc]initWithFrame:CGRectMake(0, 40, ALLWIDTH, ALLHEIGHT-40)];
        tableview.delegate =self;
        tableview.dataSource = self;
        tableview.tableFooterView = [[UIView alloc]init];
        [self.view addSubview:tableview];
        
        
        dataArr = [NSArray array];
        dataArr = @[@"呵呵",@"哈哈",@"嗯嗯",@"呃呃",@"很好"];
        
        isOpenArr = [NSMutableArray array];
        
        for (int i =0; i< dataArr.count; i++) {
            
            [isOpenArr addObject:@"0"];
        }
        
    }
    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 5;
    }
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        if([isOpenArr[section] isEqualToString:@"1"])
        {
            return dataArr.count;
        }else{
            return 0;
        }
    }
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSString *cellstr = @"cell";
        UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellstr];
        if (!cell) {
            cell = [tableview dequeueReusableCellWithIdentifier:cellstr forIndexPath:indexPath];
        }
        
        cell.textLabel.text = dataArr[indexPath.row];
        
        return cell;
    
    }
    
    -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
    {
        return 50;
    }
    
    -(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
    {
        UIView *view  =[[UIView alloc]init];
        UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(0, 0,ALLWIDTH, 50)];
        lable.text =  [NSString stringWithFormat:@"------------第%ld组---------",(long)section];
        lable.textColor = [UIColor redColor];
        [view addSubview:lable];
        
        
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(topgesture:)];
        [view addGestureRecognizer:tap];
        
        view.tag = section;
        return view;
    
    }
    //在组头上添加点击手势
    -(void)topgesture:(UITapGestureRecognizer*)tap
    {
        NSInteger index = tap.view.tag;
        
        if ([isOpenArr[index] isEqualToString:@"1"]) {
            
            [isOpenArr replaceObjectAtIndex:index withObject:@"0"];
    
        }else{
            [isOpenArr replaceObjectAtIndex:index withObject:@"1"];
            
        }
        [tableview reloadData];
        
    }
    
    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    {
        [tableview deselectRowAtIndexPath:indexPath animated:YES];
        NSLog(@"------================--%ld-----",indexPath.row);
    }
    
    
    @end

     自己最近几天正在学习swifit,于是就试着用swift 写了一遍,

    //
    //  ViewController.swift
    //  测试--Swift--Test
    //
    //  Created by abc on 16/7/26.
    //  Copyright © 2016年 LiuWenqiang. All rights reserved.
    //
    
    import UIKit
    
    class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
        
        let ALLwidth = UIScreen.mainScreen().bounds.width
        let ALLheight = UIScreen.mainScreen().bounds.height
    
        var tableview:UITableView = UITableView()
        var DataArr: NSMutableArray = NSMutableArray()
        
        var selectindex:NSMutableArray = NSMutableArray()
        
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
        
            tableview.frame = CGRectMake(0, 50, ALLwidth, ALLheight)
            tableview.delegate = self
            tableview.dataSource = self
            self.view.addSubview(tableview)
            
            
            DataArr = ["第一行","第二行","第三行","第四行"]
            
            for _ in DataArr {
                
                selectindex.addObject("0")
            }
      
        }
    
        func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return 4
        }
    
       func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
       {
        if selectindex[section] .isEqual("1") {
            
            return DataArr.count
            
        }else{
        
            return 0
        }
        
        }
        func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
        
        {
            let indenfer = "cell"
            let cell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: indenfer)
            
            cell.textLabel?.text = DataArr[indexPath.row] as? String
            
            return cell
        }
        
        func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
            return 50
        }
        func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
            
            let str:String = "-----------" + "(section)" + "-------------"
            
            return str
            
        }
        
        func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
            
            let headerview:UIView = UIView()
            headerview.frame = CGRectMake(0, 0, ALLwidth,50)
            headerview.backgroundColor = UIColor.grayColor()
            let lable:UILabel = UILabel()
            lable.frame = headerview.bounds
            lable.text = "-----------" + "第(section)组" + "-------------"
            lable.textColor = UIColor.redColor()
            headerview.addSubview(lable)
            
            let tap = UITapGestureRecognizer.init(target: self, action:#selector(ViewController.clicktap(_:)))
            headerview.tag = section
            headerview.addGestureRecognizer(tap)
            
            return headerview
        }
        
        func clicktap(tap:UITapGestureRecognizer){
            
            print("=====(tap.view?.tag)")
            let index:Int = tap.view!.tag
         
    
            if selectindex[index] .isEqual("1"){
                
                selectindex.replaceObjectAtIndex(index, withObject: "0")
    
            }else{
            
                selectindex.replaceObjectAtIndex(index, withObject: "1")
            }
            
            tableview .reloadData()
            
        }
        
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
    
    }
  • 相关阅读:
    HDU 1285
    HDU 1251
    HDU 1166
    UVA 10003
    HDU 5968
    CodeForces 371C
    POJ 2456
    POJ 2250
    oracle的start with connect by prior
    Hibernate session中的createCriteria方法
  • 原文地址:https://www.cnblogs.com/liuwenqiang/p/5707109.html
Copyright © 2020-2023  润新知