广

IOS开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    IOS实现展开二级列表效果

    2018-04-08 09:03:58 次阅读 稿源:互联网
    广告

    先来看看效果图

    用法(类似UITableView)

    初始化XDMultTableView

    #import "XDMultTableView.h"...@property(nonatomic, readwrite, strong)XDMultTableView *tableView; _tableView = [[XDMultTableView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height-64)]; _tableView.openSectionArray = [NSArray arrayWithObjects:@1,@2, nil]; _tableView.delegate = self; _tableView.datasource = self; _tableView.backgroundColor = [UIColor whiteColor]; [self.view addSubview:_tableView];

    实现数据源

    - (NSInteger)mTableView:(XDMultTableView *)mTableView numberOfRowsInSection:(NSInteger)section{ return 5;}- (XDMultTableViewCell *)mTableView:(XDMultTableView *)mTableView    cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *cellIdentifier = @"cell"; UITableViewCell *cell = [mTableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) {  cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; } UIView *view = [[UIView alloc] initWithFrame:cell.bounds] ; view.layer.backgroundColor = [UIColor whiteColor].CGColor; view.layer.masksToBounds = YES; view.layer.borderWidth  = 0.3; view.layer.borderColor  = [UIColor lightGrayColor].CGColor; cell.backgroundView = view; cell.selectionStyle = UITableViewCellSelectionStyleNone; return cell;}- (NSInteger)numberOfSectionsInTableView:(XDMultTableView *)mTableView{ return 6;}-(NSString *)mTableView:(XDMultTableView *)mTableView titleForHeaderInSection:(NSInteger)section{ return @"我是头部";}

    实现代理

    - (CGFloat)mTableView:(XDMultTableView *)mTableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 50;}- (CGFloat)mTableView:(XDMultTableView *)mTableView heightForHeaderInSection:(NSInteger)section{ return 40;}- (void)mTableView:(XDMultTableView *)mTableView willOpenHeaderAtSection:(NSInteger)section{ NSLog(@"即将展开");}- (void)mTableView:(XDMultTableView *)mTableView willCloseHeaderAtSection:(NSInteger)section{ NSLog(@"即将关闭");}- (void)mTableView:(XDMultTableView *)mTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"点击cell");}

    列表展开关闭的实现原理
    在section header注册一个手势

    //section header view 设置tag值为sectionview.tag = section;UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapHeader:)]; [view addGestureRecognizer:tap];

    手势的响应事件

    - (void)tapHeader:(UITapGestureRecognizer *) tap { NSInteger section = tap.view.tag; NSNumber *sectionObj = [NSNumber numberWithInteger:section]; UIImageView *imageView = (UIImageView *)[tap.view viewWithTag:100]; //_multopenSectionArray 用于记录每个 section的展开和关闭状态 if ([_multopenSectionArray containsObject:sectionObj]) {  NSArray *deleteArray = [self buildDeleteRowWithSection:section];  [_multopenSectionArray removeObject:sectionObj];  //想关闭的section的所有indexPath  [_tableView deleteRowsAtIndexPaths:deleteArray withRowAnimation:UITableViewRowAnimationFade];  [UIView animateWithDuration:0.3 animations:^{   imageView.transform = CGAffineTransformMakeRotation(-M_PI/2);  }]; }else{  [_multopenSectionArray addObject:sectionObj];  //想展开的section的所有indexPath  NSArray *insertArray = [self buildInsertRowWithSection:section];  [_tableView insertRowsAtIndexPaths:insertArray withRowAnimation:UITableViewRowAnimationFade];  [UIView animateWithDuration:0.3 animations:^{   imageView.transform = CGAffineTransformMakeRotation(0);  }]; }}

    总结

    以上就是IOS实现展开二级列表效果的全部内容,希望对大家学习开发IOS能有所帮助。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告