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.
    }


}

 

posted @ 2016-07-26 13:03  新司机上路  阅读(1568)  评论(0编辑  收藏  举报
本人qq1365102044,有问题欢迎沟通!