iOS实现列表折叠效果

本文实例为大家分享了iOS实现列表折叠效果的具体代码,供大家参考,具体内容如下

实现列表折叠效果其实比较简单,点击列表头部的时候,把返回列表行数设为 0,就是收起列表;再次点击列表头部,显示列表的行数,就展开了列表。

#import "TableDownUpVC.h"
#import "TableViewCell_TableSelect.h"

@interface TableDownUpVC ()
{
  NSMutableDictionary *dicSelet;
  NSArray *arrData;
  NSMutableArray *arrStatus;
  NSInteger selectFlag;

  NSMutableDictionary *dictShow;
}

@property (nonatomic, strong) UIImageView *imgArror;

@end

@implementation TableDownUpVC

- (void)viewDidLoad {
  [super viewDidLoad];
  self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
  self.title = @"列表折叠效果";

  dictShow = [[NSMutableDictionary alloc] init];
  arrStatus = [[NSMutableArray alloc] init];

  NSDictionary *dict0 = @{@"section":@"头部0",
              @"content":@[@{@"title":@"Section0",@"subTitle":@"Row0",@"avator":@"user_default_blue"},
                     @{@"title":@"Section0",@"subTitle":@"Row1",@"avator":@"user_default_blue"},
                     @{@"title":@"Section0",@"subTitle":@"Row2",@"avator":@"user_default_blue"}]};

  NSDictionary *dict1 = @{@"section":@"头部1",
              @"content":@[@{@"title":@"Section1",@"subTitle":@"Row0",@"avator":@"user_default_blue"},
                     @{@"title":@"Section1",@"subTitle":@"Row1",@"avator":@"user_default_blue"},
                     @{@"title":@"Section1",@"subTitle":@"Row2",@"avator":@"user_default_blue"}]};

  NSDictionary *dict2 = @{@"section":@"头部2",
              @"content":@[@{@"title":@"Section2",@"subTitle":@"Row0",@"avator":@"user_default_blue"},
                     @{@"title":@"Section2",@"subTitle":@"Row1",@"avator":@"user_default_blue"},
                     @{@"title":@"Section2",@"subTitle":@"Row2",@"avator":@"user_default_blue"}]};

  arrData = @[dict0,dict1,dict2];

  dicSelet = [[NSMutableDictionary alloc] init];

  //初始化选中状态(默认都不选择)
  for (NSInteger i=0; i<arrData.count; i++) {
    NSArray *content = arrData[i][@"content"];
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    for (NSInteger j=0; j<content.count; j++) {
      [dict setObject:@"0" forKey:STR_NUM(j)];
    }
    [arrStatus addObject:dict];
  }

  //初始化列表头部折叠状态
  for (NSInteger i=0; i<arrData.count; i++) {
    [dictShow setObject:@"0" forKey:STR_NUM(i)];
  }
}

#pragma mark - TableViewDataSource,UITableViewDelegate 扩展

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
  return arrData.count;
}

- (NSInteger)tableViewEx:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  NSString *isShow = dictShow[STR_NUM(section)];
  if ([isShow isEqualToString:@"0"]) {
    NSArray *arr = arrData[section][@"content"];
    return arr.count;
  } else {
    return 0;
  }
}

- (CGFloat)tableViewEx:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  return 60;
}

- (UITableViewCell *)tableViewEx:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  static NSString * identifier = @"cellIdentifier";
  TableViewCell_TableSelect *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
  cell.selectionStyle = UITableViewCellSelectionStyleNone;
  if (cell == nil) {
    cell = [[TableViewCell_TableSelect alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
  }
  [cell setDictInfo:arrData[indexPath.section][@"content"][indexPath.row]];
  [cell setAccessoryImage:arrStatus[indexPath.section][STR_NUM(indexPath.row)]];

  return cell;
}

- (void)tableViewEx:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSMutableDictionary *dict = arrStatus[indexPath.section];
  NSString *str = dict[STR_NUM(indexPath.row)];
  if ([str isEqualToString:@"0"]) {
    [dict setValue:@"1" forKey:STR_NUM(indexPath.row)];
  } else {
    [dict setValue:@"0" forKey:STR_NUM(indexPath.row)];
  }
  [self.tableView reloadData];
}

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
  return 50;
}

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
  return 10;
}

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

  UIView *headerView = [UICommonCtrl commonViewWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 50) color:kColor_White];

  UILabel *title = [UICommonCtrl commonLabelWithFrame:CGRectMake(10, 15, 200, 20)
                          text:arrData[section][@"section"]
                         color:kColor_Black
                          font:kFont_Large
                     textAlignment:NSTextAlignmentLeft];
  [headerView addSubview:title];

  _imgArror = [UICommonCtrl commonImageViewWithFrame:CGRectMake(SCREEN_WIDTH-20, 22.5, 10, 5) image:nil];
  [headerView addSubview:_imgArror];

  NSString *str = [dictShow objectForKey:STR_NUM(section)];
  if ([str isEqualToString:@"0"]) {
    _imgArror.image = [UIImage imageNamed:@"icon_down"];
  } else {
    _imgArror.image = [UIImage imageNamed:@"icon_up"];
  }

  @weakify(self)
  UIButton *btn = [UICommonCtrl commonButtonWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 50)
                          text:@""
                         color:kColor_Black
                          font:kFont_Large
                    backgroundImage:nil
                         block:^(UIButton *btn) {
                           @strongify(self)
                           NSString *str = [dictShow objectForKey:STR_NUM(section)];
                           if ([str isEqualToString:@"0"]) {
                             [dictShow setValue:@"1" forKey:STR_NUM(section)];
                           } else {
                             [dictShow setValue:@"0" forKey:STR_NUM(section)];
                           }
                           [self refreshSection:section];

                         }];
  [headerView addSubview:btn];

  for (NSInteger i=0; i<2; i++) {
    UIView *line = [UICommonCtrl commonLineViewWithFrame:CGRectMake(0, (50-LINE_SIZE)*i, SCREEN_WIDTH, LINE_SIZE) color:kColor_Line];
    [headerView addSubview:line];
  }

  return headerView;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
  UIView *footerView = [UICommonCtrl commonViewWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 10) color:kColor_Background];
  return footerView;
}

- (void)refreshSection:(NSInteger)section
{
  NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:section];
  [self.tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationFade];
}

@end

效果图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • IOS实现展开二级列表效果

    先来看看效果图 用法(类似UITableView) 初始化XDMultTableView #import "XDMultTableView.h" ... @property(nonatomic, readwrite, strong)XDMultTableView *tableView; _tableView = [[XDMultTableView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, sel

  • ios基于UITableViewController实现列表

    实现效果图如下: News.h #import <Foundation/Foundation.h> @interface News : NSObject @property (nonatomic, strong) NSString *title; @property (nonatomic) NSUInteger count; @property (nonatomic, strong) NSString *imageName; + (NSArray *)demoData; @end<str

  • IOS展开三级列表效果示例

    效果图如下: #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @end #import "AppDelegate.h" #import "RootViewController.h" @interface AppDelegate

  • IOS实现简易版的QQ下拉列表

    下面我们通过实例代码来一步步看怎么实现, 首先建立了两个模型类, 一个Friend, 一个FriendGroup类. 数据源用的本地的一个plist文件. plist文件中包含了FriendGroup的name,friends数组等属性. Friend.h 示例代码 #import <Foundation/Foundation.h> @interface Friend : NSObject @property (nonatomic, copy) NSString *name; @end Fri

  • iOS多级列表实现代码

    在项目开发中,层级列表经常遇到,简单点的二级列表利用UITableView的Header就可以实现,再简单点的三级列表通过对Cell高度进行调整也可以实现三级列表的效果.但遇到多级列表,尤其是层次不明的动态列表就比较麻烦了. 原理 层级列表和树形结构比较类似,不过不是二叉树,而是多叉树.每个节点只需要拥有指向父节点和子节点的两个指针,就能形成一颗树.我们将多级列表中每一级对象看作一个node,node拥有两个属性,分别为父节点和子节点的ID. 每棵树有个一个虚拟的root节点,它的ID为root

  • iOS实现列表折叠效果

    本文实例为大家分享了iOS实现列表折叠效果的具体代码,供大家参考,具体内容如下 实现列表折叠效果其实比较简单,点击列表头部的时候,把返回列表行数设为 0,就是收起列表:再次点击列表头部,显示列表的行数,就展开了列表. #import "TableDownUpVC.h" #import "TableViewCell_TableSelect.h" @interface TableDownUpVC () { NSMutableDictionary *dicSelet; N

  • 基于iOS实现图片折叠效果

    本文实例为大家分享了iOS实现图片折叠效果的具体代码,供大家参考,具体内容如下 一.分析与说明 1.1 分析界 效果 当鼠标在图片上拖动的时候,图片上有一个折叠的效果. 这种折叠效果其实就是图片的上半部分绕着X轴做一个旋转的操作. 我们图片的旋转都是绕着锚点进 旋转的.所以如果是一张图片的,办不到只上图 的上半部 分进 个旋转. 其实是两张图片, 把两张图片合成一张图片的方法, 实现方案.弄上下两张图 ,上部图片只显示上半部分, 下部图片只显示下半部分. 1.2 如果让 张图 只显 上半部分或者

  • iOS实现图片折叠效果

    本文实例为大家分享了iOS实现图片折叠效果的具体代码,供大家参考,具体内容如下 效果图: 结构布局:拖两个UIImageView到控制器,设置相同的frame和图片,再拖一个大的UIImageView盖在上面,注意把大的imageView.userInteractionEnabled = YES;能够添加手势. 注意层次结构: 核心代码: // // ViewController.m // 图片折叠 // // Created by llkj on 2017/8/31. // Copyright

  • iOS实现头部拉伸效果

    本文实例为大家分享了iOS实现头部拉伸效果展示的具体代码,供大家参考,具体内容如下 主要涉及到导航栏透明度.图片拉伸.列表头部等. 导航栏透明度的实现. 列表拖动距离的监听,及图片放大的实现. 导航透明度的设置 添加系统导航栏的Category实现 声明部分: @interface UINavigationBar (BackgroundColor) - (void)lt_setBackgroundColor:(UIColor *)color; @end 实现部分: #import <objc/r

  • Unity实现QQ列表折叠菜单

    本文实例为大家分享了Unity实现QQ列表折叠菜单的具体代码,供大家参考,具体内容如下 主要用到了GUI的自动布局功能,VerticalLayoutGroup,注意ChildControlsSize 和ChildForceExpand属性设置为 Width 效果: 实现代码: /// <summary> /// 折叠菜单 /// </summary> public class FoldPanel : MonoBehaviour { [SerializeField] private

  • IOS等待时动画效果的实现

    查询时间或长或短,为了提升用户体验,目前用的比较多的手段之一就是查询等待时添加一个动态等待效果.当我们在请求网络时加载页面时有个动作效果,效果图如下: 源代码可以网上找开源项目Coding.net,上面的效果原理为两张图片组合,外面那个则为动画转动,里面的图标则是透明度的变化:主要代码如下: 1:把它封装在EaseLoadingView里面 @interface EaseLoadingView : UIView @property (strong, nonatomic) UIImageView

  • IOS图片设置毛玻璃效果

    推荐阅读:ios毛玻璃效果的实现及图片模糊效果的三种方法 废话不多说了,直接给大家贴代码了,具体代码如下所示: // 创建需要的毛玻璃特效类型 UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; // 毛玻璃view 视图 UIVisualEffectView *effectView = [[UIVisualEffectView alloc] initWithEffect:blurEf

  • iOS仿擦玻璃效果的实现方法

    照例先看下效果图 实现思路 动手前先想了下思路,就是利用母鸡哥讲的涂鸦 + 设置layer的mask的方式,这样做可以说是非常简单了.然后就用了半下午的时间写完了,效果基本和大神写得那个一样,而且对比了下代码量,我写得真是简单明了呀,用了不到大神代码量一半的代码就完成了同样的功能,心情愉悦.然后我又跑了大神的应用看了看cpu利用率(我用5s跑的),大约最高保持在百分这十几,感觉有点高但也可以,再跑我自己写得,令我大吃了一惊,随便划几下就百分之40+了,这么个小东西耗这么多cpu那这也太low了.

  • iOS自带动画效果的实例代码

     1.普通动画: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:2]; frame.origin.x += 150; [img setFrame:frame]; [UIView commitAnimations]; 2.连续动画(一系列图像): NSArray *myImages = [NSArray arrayWithObjects: [UIImage imageNamed:@"myImage1.p

随机推荐