首页 > 代码库 > 模仿聊天窗口的分组的效果(粗糙的Demo)

模仿聊天窗口的分组的效果(粗糙的Demo)

#import "AViewController.h"#define max 8888888888@interface AViewController ()<UITableViewDelegate,UITableViewDataSource>@property (nonatomic,strong)UITableView *myTabView;@property (nonatomic,strong)NSArray     *dataArray;@property (nonatomic,assign)NSInteger   rowNumber;@property (nonatomic,assign)NSInteger   sectionNumber;@end@implementation AViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization        self.rowNumber = 0;        self.sectionNumber=max;    }    return self;}- (void)viewDidLoad{    [super viewDidLoad];    // Do any additional setup after loading the view.    [self.view addSubview:self.myTabView];    }-(UITableView *)myTabView{    if (!_myTabView) {        CGRect rect = self.view.bounds;        rect.origin.y=20;        rect.size.height=rect.size.height-rect.origin.y;        _myTabView = [[UITableView alloc]initWithFrame:rect style:UITableViewStylePlain];        _myTabView.delegate = self;        _myTabView.dataSource = self;    }    return _myTabView;}-(NSArray*)dataArray{    if (!_dataArray) {        self.dataArray = @[@{@"array": @[@"11",@"12",@"13",@"14",@"15"],@"name":@"one"},                           @{@"array": @[@"21",@"22",@"23",@"24",@"25"],@"name":@"two"},                           @{@"array": @[@"31",@"32",@"33",@"34",@"35"],@"name":@"three"},                           @{@"array": @[@"41",@"42",@"43",@"44",@"45"],@"name":@"four"},                           @{@"array": @[@"51",@"52",@"53",@"54",@"55"],@"name":@"five"}];    }    return _dataArray;}- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{    return self.dataArray.count;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;{    if (_sectionNumber!=max) {        if (section==_sectionNumber) {            return 1+_rowNumber;        }        return 1;    }else{        return 1;    }}-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{    static NSString *indexCell = @"groupCell";    UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:indexCell];    if (!cell) {        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:indexCell];    }    if (indexPath.row==0) {        cell.textLabel.text = self. dataArray[indexPath.section][@"name"];    }else{        cell.textLabel.text = self.dataArray[indexPath.section][@"array"][indexPath.row-1];    }    return cell;}-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    NSUInteger number =[self.dataArray[indexPath.section][@"array"]  count];        if (indexPath.row==0) {            if(_sectionNumber == max){                _sectionNumber =indexPath.section;                [self addCellwithNumber:number];            }else if (_sectionNumber==indexPath.section) {                [self removeCellwithNumber:number];                _sectionNumber =max;            }else{                [self removeCellwithNumber:number];                _sectionNumber = indexPath.section;                [self addCellwithNumber:number];            }                    }}-(void)removeCellwithNumber:(NSInteger)number{    for (int i=(int)number; i>=1; i--) {        --_rowNumber;        [self.myTabView deleteRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:i inSection:_sectionNumber]] withRowAnimation:UITableViewRowAnimationTop];    }}-(void)addCellwithNumber:(NSInteger)number{    for (int i=1; i<=number; i++) {        ++_rowNumber;        [self.myTabView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:i inSection:_sectionNumber]] withRowAnimation:UITableViewRowAnimationTop];    }}@end

.h文件里啥都木有,就不贴了。

其实关于这个,没什么好说的,就是要注意折腾一个问题,在改变tableView的数据时的问题,数据变化一定要与试图对应,否则,各种蹦蹦蹦。