iOS处理tableview的展开以及展开View上的响应事件(一)

在工作中经常会遇到展开式tableview的处理,如何快速的完成一个合适的可展开的tableView,以及对展开cell上的视图事件进行处理对新手开发者是一个比较伤脑筋的问题。结合最近手头的一个项目,我来总结一个简单的可展开的tableView的实现方式

首先,一个标记状态是必不可少的

@property(nonatomic,assign)BOOL isExpand;      //tableView是否打开标记

@property(nonatomic,assign)NSInteger SelectSection;    //选择的是哪一个section

//以tableView的section和row相结合,section为外层,row为展开层,简单方便

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{

return 4;

}

//在tableview的返回row的个数的代理方法中,处理isExpand的状态,在打开状态时返回需要的个数,你可以自定义一个数组来展示相应的数量

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

//在这里,我们让tableview在打开时展示2个row,关闭时返回0

if (self.isExpand == YES && section == self.SelectSection) {

return 2;

}

else

return 0;

}

return 0;

}

//当tableView展开时,使用我们的自定义cell来填充

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

if (self.isExpand == YES) {

    self.dayChosCell = [tableView cellForRowAtIndexPath:indexPath];

    self.dayChosCell.selectionStyle = UITableViewCellSelectionStyleNone;

    self.dayChosCell.bigDicCellUseDic = self.bigMsgDic;  //此处为自定义cell中所需要的数据,视个人情况传值

    self.dayChosCell.selectWeek = [NSString stringWithFormat:@"%ld",self.SelectSection];   //把目前所点击的section也传进去

    if (!self.dayChosCell)

        {

//我重写了cell的初始化方法,传进了我所需要的两个数据

        self.dayChosCell = [[ChooseDayTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"DAYS"AndSelectWeek:[NSString stringWithFormat:@"%ld",self.SelectSection] AndDic:self.bigMsgDic];

        self.dayChosCell.bigDicCellUseDic = self.bigMsgDic;

self.dayChosCell.frame = CGRectMake(0, 0, kWidth, [self tableView:self.PCDetailTableView heightForRowAtIndexPath:indexPath]);

self.dayChosCell.selectionStyle = UITableViewCellSelectionStyleNone;

//这里是方便cell内部视图点击事件的处理,使用了一个代理

self.dayChosCell.BtnSelectDelegate = self;

}

return self.dayChosCell;

}

else{

//当cell未展开时,返回nil

return nil;

}

return nil;

}

//不要忘了cell的返回高度

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

return 120;

}

//这里是建立section上的自定义View,由于我所需要的View比较简单,所以直接在这里创建了,也可以使用xib创建发咋的自定义view

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

UIView *viewForHeader = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 60)];

UIButton *weekBtn = [UIButton buttonWithType:UIButtonTypeCustom];

weekBtn.frame = viewForHeader.frame;

weekBtn.tag = 556+section;    //这里是随便加了一个数字,防止其他地方发生tag值相同的尴尬情况

[weekBtn addTarget:self action:@selector(WeekSelectAction:) forControlEvents:UIControlEventTouchDown];

//这里是UIButton的一个类目,方便了初始化btn之后复杂的设定,

[weekBtn setTitle:[NSString stringWithFormat:@"%@",self.weekArray[section]] andTitleState:UIControlStateNormal andFont:[UIFont fontWithName:@"Helvetica-Bold" size:14] andTitleColor:[UIColor colorWithHex:0x222222] andColorState:UIControlStateNormal andBgColor:[UIColor whiteColor] andRadius:0];

[viewForHeader addSubview:weekBtn];

return viewForHeader;

}

//设置section的高度

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

return 60;

}

//为了美观,将footer设置为0,当然,需要footer时也可以设置

-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{

return 0;

}

//由于我并不需要左滑编辑,所以我把编辑代理关掉了

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{

return NO;

}


//这是section上的btn的点击事件,由此控制isExpand的状态

-(void)WeekSelectAction:(UIButton *)sender{

if (self.isExpand == NO) {

self.isExpand = YES;

sender.selected = YES;

self.SelectSection = sender.tag - 556;

//只需要重载tableview,不需要insert或者delete,绕过了新手头疼的数组越界问题

[self.whichWeekView.weekTableView reloadData];

}

else

{

self.isExpand = NO;

sender.selected = NO;

self.SelectSection = sender.tag;

[self.whichWeekView.weekTableView reloadData];

}

}


这样就可以简单的完成一个可以展开收起的tableview了,对于展开cell上的事件处理,我们下一篇见。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容