热门标签 | HotTags
当前位置:  开发笔记 > IOS > 正文

IOS展开三级列表效果示例

今天介绍的是一个很不错的三级列表展开效果的例子,文章运用实例代码介绍的很详细,提供给学习IOS的小伙伴们使用。

效果图如下:

#import 

@interface AppDelegate : UIResponder 

@property (strong, nonatomic) UIWindow *window;


@end
#import "AppDelegate.h"
#import "RootViewController.h"
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  // Override point for customization after application launch.
  self.window.backgroundColor = [UIColor whiteColor];
  
  RootViewController *root = [[RootViewController alloc] init];
  UINavigationController *navi = [[UINavigationController alloc] initWithRootViewController:root];
  self.window.rootViewCOntroller= navi;
  
  [self.window makeKeyAndVisible];
  return YES;
}


@end
#import 
 
@interface RootViewController : UIViewController
 
@end
#import "RootViewController.h"
#import "MainCell.h"
#import "DetialTableViewCell.h"
@interface RootViewController ()
{
  UITableView *_tableView;
  NSMutableDictionary *dic;//存对应的数据
  NSMutableArray *selectedArr;// 二级列表是否展开状态
  NSMutableArray *titleDataArray;
  NSArray *dataArray;//数据源,显示每个cell的数据
  NSMutableDictionary *stateDic;//三级列表是否展开状态
  NSMutableArray *groupArr0;
  NSMutableArray *groupArr1;
  NSMutableArray *groupArr2;
  NSMutableArray *groupArr3;
  NSMutableArray *groupArr4;
  NSMutableArray *groupArr5;
  
}
@end

@implementation RootViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  self.title = @"列表";
  dic = [[NSMutableDictionary alloc] init];
  selectedArr = [[NSMutableArray alloc] init];
  dataArray = [[NSMutableArray alloc] init];
  
  // 初始化tableView
  _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320*scaleX, [UIScreen mainScreen].bounds.size.height) style:UITableViewStylePlain];
  _tableView.delegate = self;
  _tableView.dataSource = self;
  // 隐藏滚动条
  _tableView.showsVerticalScrollIndicator = NO;
  _tableView.showsHorizOntalScrollIndicator= NO;
  _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
  [self.view addSubview:_tableView];
  
  // 加载数据
  [self loadData];
}
/**
 * 加载数据
 */
- (void)loadData
{
  titleDataArray = [[NSMutableArray alloc] initWithObjects:@"亲朋",@"家人",@"好友", @"蓝颜",@"同学",@"老乡",nil];
  
  NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"小莉",@"name",@"NO",@"state", nil];
  NSMutableDictionary *nameAndStateDic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"婷婷",@"name",@"NO",@"state", nil];
  NSMutableDictionary *nameAndStateDic3 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"小庄",@"name",@"NO",@"state", nil];
  
  groupArr0 = [[NSMutableArray alloc] initWithObjects:nameAndStateDic1,nameAndStateDic2,nameAndStateDic3, nil];
  
  NSMutableDictionary *nameAndStateDic4 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"晨晨姐",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic5 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"李涛",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic6 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"海波",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic7 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"张敏",@"name",@"NO",@"state",nil];
  
  groupArr1 = [[NSMutableArray alloc]initWithObjects:nameAndStateDic4,nameAndStateDic5,nameAndStateDic6,nameAndStateDic7, nil];
  
  NSMutableDictionary *nameAndStateDic8 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"杨浩",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic9 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"小明",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic10 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"洋洋",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic11 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"赵蒙",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic12 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"小催",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic13 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"和平",@"name",@"NO",@"state",nil];
  
  groupArr2 = [[NSMutableArray alloc]initWithObjects:nameAndStateDic8,nameAndStateDic9,nameAndStateDic10,nameAndStateDic11,nameAndStateDic12,nameAndStateDic13,nil];
  
  NSMutableDictionary *nameAndStateDic14 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"超人",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic15 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"怪兽",@"name",@"NO",@"state",nil];
  
  groupArr3 = [[NSMutableArray alloc] initWithObjects:nameAndStateDic14,nameAndStateDic15, nil];
  
  NSMutableDictionary *nameAndStateDic16 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"大包",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic17 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"小林子",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic18 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"石头",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic19 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"小轩轩",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic20 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"阿东",@"name",@"NO",@"state",nil];
  
  groupArr4 = [[NSMutableArray alloc]initWithObjects:nameAndStateDic16,nameAndStateDic17,nameAndStateDic18,nameAndStateDic19,nameAndStateDic20, nil];
  
  NSMutableDictionary *nameAndStateDic21 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"郑平",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic22 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"刘凡",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic23 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"韩琴",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic24 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"刘华健",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic25 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"彭晓明",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic26 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"张欢",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic27 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"刘来楠",@"name",@"NO",@"state",nil];
  NSMutableDictionary *nameAndStateDic28 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",@"任强",@"name",@"NO",@"state",nil];
  
  groupArr5 = [[NSMutableArray alloc]initWithObjects:nameAndStateDic21,nameAndStateDic22,nameAndStateDic23,nameAndStateDic24,nameAndStateDic25,nameAndStateDic26,nameAndStateDic27,nameAndStateDic28, nil];

  [dic setValue:groupArr0 forKey:@"0"];
  [dic setValue:groupArr1 forKey:@"1"];
  [dic setValue:groupArr2 forKey:@"2"];
  [dic setValue:groupArr3 forKey:@"3"];
  [dic setValue:groupArr4 forKey:@"4"];
  [dic setValue:groupArr5 forKey:@"5"];
  
}

#pragma mark - tableViewDelegate - 
// 返回几个表头
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
  return titleDataArray.count;
}

// 每个表头返回几行
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
  NSString *string = [NSString stringWithFormat:@"%d",(int)section];
  // 如果表头返回值不为零,则修改图片(改成箭头向下的图片)
  if ([selectedArr containsObject:string]) {
    UIImageView *imageView = (UIImageView *)[_tableView viewWithTag:20000 + section];
    imageView.image = [UIImage imageNamed:@"buddy_header_arrow_down"];
    
    NSArray *array1 = dic[string];
    return array1.count;
  }
  return 0;
}

// 设置表头的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
  return 40*scaleX;
}
// Section Footer的高度
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
  return 0.2;
}
// 设置view,将替代titleForHeaderInsection方法
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
  UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320*scaleX, 30*scaleY)];
  view.backgroundColor = [UIColor whiteColor];
  
  UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(20*scaleX, 5*scaleY, tableView.frame.size.width - 20*scaleX, 30*scaleY)];
  titleLabel.text = [titleDataArray objectAtIndex:section];
  [view addSubview:titleLabel];
  
  UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(5*scaleX, 12*scaleY, 15*scaleX, 15*scaleY)];
  imageView.tag = 20000+section;

  // 判断是不是选中状态
  NSString *string = [NSString stringWithFormat:@"%d",(int)section];
  if ([selectedArr containsObject:string]) {
    imageView.image = [UIImage imageNamed:@"buddy_header_arrow_down"];
  }else{
    imageView.image = [UIImage imageNamed:@"buddy_header_arrow_right"];
  }
  [view addSubview:imageView];
  
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  button.frame = CGRectMake(0, 0, 320*scaleX, 40*scaleY);
  button.tag = 100 + section;
  [button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
  [view addSubview:button];
  
  UIImageView *lineImage = [[UIImageView alloc] initWithFrame:CGRectMake(0, 40*scaleY - 1, 320*scaleX, 1)];
  lineImage.image = [UIImage imageNamed:@"line"];
  [view addSubview:lineImage];
  
  return view;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
  NSString *indexStr = [NSString stringWithFormat:@"%d",(int)indexPath.section];
  if ([dic[indexStr][indexPath.row][@"cell"] isEqualToString:@"MainCell"]) {
    return 60*scaleY;
  }else{
    return 40*scaleY;
  }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
  // 当前是第几个表头
  NSString *indexStr = [NSString stringWithFormat:@"%d",(int)indexPath.section];
  if ([dic[indexStr][indexPath.row][@"cell"] isEqualToString:@"MainCell"]) {
    static NSString *identifier = @"MainCell";
    MainCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    
    if (cell == nil) {
      cell = [[MainCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
      cell.selectiOnStyle= UITableViewCellSelectionStyleGray;
    }
    
    if ([selectedArr containsObject:indexStr]) {
      cell.Headerphoto.image = [UIImage imageNamed:[NSString stringWithFormat:@"%d.png",arc4random()%11]];
      cell.nameLabel.text = dic[indexStr][indexPath.row][@"name"];
      cell.IntroductionLabel.text = @"滴滴雨点仿佛似流泪,滴在我冰冷的身躯";
      cell.networkLabel.text = @"2G";
    }
    // ???
    if (indexPath.row == dataArray.count - 1) {
      cell.imageLine.image = nil;
    }else{
      cell.imageLine.image = [UIImage imageNamed:@"line"];
    }
    return cell;
  }else if ([dic[indexStr][indexPath.row][@"cell"] isEqualToString:@"AttachedCell"]){
    static NSString *detialIdentifier = @"AttachedCell";
    DetialTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:detialIdentifier];
    
    if (cell == nil) {
      cell = [[DetialTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:detialIdentifier];
      cell.selectiOnStyle= UITableViewCellSeparatorStyleNone;
      cell.imageLine.image = [UIImage imageNamed:@"line"];
    }
    return cell;
  }
  return nil;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  // TODO:search
  [_tableView deselectRowAtIndexPath:indexPath animated:YES];
  NSString *indexStr = [NSString stringWithFormat:@"%d",(int)indexPath.section];
  NSIndexPath *path = nil;
  
  if ([dic[indexStr][indexPath.row][@"cell"] isEqualToString:@"MainCell"]) {
    // TODO:search
    path = [NSIndexPath indexPathForItem:(indexPath.row + 1) inSection:indexPath.section];
  }else{
    path = indexPath;
  }  
  if ([dic[indexStr][indexPath.row][@"state"] boolValue]) {
    // 关闭附加cell
    NSMutableDictionary *dd = dic[indexStr][indexPath.row];
    NSString *name = dd[@"name"];
    
    NSMutableDictionary *nameAndStateDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",name,@"name",@"NO",@"state", nil];
    
    switch (indexPath.section) {
      case 0:
      {
        groupArr0[(path.row-1)] = nameAndStateDic;
        [groupArr0 removeObjectAtIndex:path.row];
      }
        break;
      case 1:
      {
        groupArr1[(path.row-1)] = nameAndStateDic;
        [groupArr1 removeObjectAtIndex:path.row];
      }
        break;
      case 2:
      {
        groupArr2[(path.row-1)] = nameAndStateDic;
        [groupArr2 removeObjectAtIndex:path.row];
      }
        break;
      case 3:
      {
        groupArr3[(path.row-1)] = nameAndStateDic;
        [groupArr3 removeObjectAtIndex:path.row];
      }
        break;
      case 4:
      {
        groupArr4[(path.row-1)] = nameAndStateDic;
        [groupArr4 removeObjectAtIndex:path.row];
      }
        break;
      case 5:
      {
        groupArr5[(path.row-1)] = nameAndStateDic;
        [groupArr5 removeObjectAtIndex:path.row];
      }
        break;
      default:
        break;
    }
    
    [_tableView beginUpdates];
    [_tableView deleteRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationMiddle];
    [_tableView endUpdates];
  }else{
    // 打开附加cell
    NSMutableDictionary *dd = dic[indexStr][indexPath.row];
    NSString *name = dd[@"name"];
    
    NSMutableDictionary *nameAndStateDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"MainCell",@"cell",name,@"name",@"YES",@"state", nil];
    switch (indexPath.section) {
      case 0:
      {
        groupArr0[(path.row-1)] = nameAndStateDic;
        NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state", nil];
        [groupArr0 insertObject:nameAndStateDic1 atIndex:path.row];
      }
        break;
      case 1:
      {
        groupArr1[(path.row-1)] = nameAndStateDic;
        NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state", nil];
        [groupArr1 insertObject:nameAndStateDic1 atIndex:path.row];
      }
        break;
      case 2:
      {
        groupArr2[(path.row-1)] = nameAndStateDic;
        NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state", nil];
        [groupArr2 insertObject:nameAndStateDic1 atIndex:path.row];
      }
        break;
      case 3:
      {
        groupArr3[(path.row-1)] = nameAndStateDic;
        NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state", nil];
        [groupArr3 insertObject:nameAndStateDic1 atIndex:path.row];
      }
        break;
      case 4:
      {
        groupArr4[(path.row-1)] = nameAndStateDic;
        NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state", nil];
        [groupArr4 insertObject:nameAndStateDic1 atIndex:path.row];
      }
        break;
      case 5:
      {
        groupArr5[(path.row-1)] = nameAndStateDic;
        NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state", nil];
        [groupArr5 insertObject:nameAndStateDic1 atIndex:path.row];
      }
        break;
      default:
        break;
    }
    [_tableView beginUpdates];
    [_tableView insertRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationMiddle];
    [_tableView endUpdates];
  }
}

-(void)buttonAction:(UIButton *)sender
{
  NSString *string = [NSString stringWithFormat:@"%d",(int)(sender.tag-100)];
  
  //数组selectedArr里面存的数据和表头想对应,方便以后做比较
  if ([selectedArr containsObject:string])
  {
    [selectedArr removeObject:string];
  }
  else
  {
    [selectedArr addObject:string];
  }
  
  [_tableView reloadData];
}

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
  // Dispose of any resources that can be recreated.
}



@end
#import 

@interface MainCell : UITableViewCell

@property (strong, nonatomic) UILabel *nameLabel;

@property (strong, nonatomic) UILabel *IntroductionLabel;

@property (strong, nonatomic) UILabel *networkLabel;

@property (strong, nonatomic) UIImageView *Headerphoto;

@property (strong, nonatomic) UIImageView *imageLine;

@end
#import "MainCell.h"

@implementation MainCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
  self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  if (self) {
    // 头像
    _Headerphoto = [[UIImageView alloc] initWithFrame:CGRectMake(6*scaleX, 5*scaleY, 50*scaleX, 50*scaleX)];
    [self.contentView addSubview:_Headerphoto];
    // 名字
    _nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(60*scaleX, 5*scaleY, 200*scaleX, 25*scaleX)];
    _nameLabel.fOnt= [UIFont systemFontOfSize:15];
    [self.contentView addSubview:_nameLabel];
    // 简介
    _IntroductiOnLabel= [[UILabel alloc] initWithFrame:CGRectMake(60*scaleX, 28*scaleY, 240*scaleX, 25*scaleX)];
    _IntroductionLabel.backgroundColor = [UIColor clearColor];
    _IntroductionLabel.textColor = [UIColor lightGrayColor];
    _IntroductionLabel.fOnt= [UIFont systemFontOfSize:13];
    [self.contentView addSubview:_IntroductionLabel];
    
    // 网络
    _networkLabel = [[UILabel alloc] initWithFrame:CGRectMake(290*scaleX, 5*scaleY, 50*scaleX, 25*scaleY)];
    _networkLabel.backgroundColor = [UIColor clearColor];
    _networkLabel.textColor = [UIColor lightGrayColor];
    _networkLabel.fOnt= [UIFont systemFontOfSize:13];
    [self.contentView addSubview:_networkLabel];
    
    // 分割线
    _imageLine = [[UIImageView alloc] initWithFrame:CGRectMake(60*scaleX, 60*scaleY - 1, (320 - 60)*scaleX, 1)];
    [self.contentView addSubview:_imageLine];
  }
  return self;
}

@end
#import 

@interface DetialTableViewCell : UITableViewCell

@property (strong, nonatomic) UIImageView *imageLine;

@end
#import "DetialTableViewCell.h"
#import "UIButton+initializer.h"
@implementation DetialTableViewCell

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
  self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
  if (self) {
    // 分割线
    _imageLine = [[UIImageView alloc] initWithFrame:CGRectMake(60*scaleX, 40*scaleY - 1, (320 - 60)*scaleY, 1)];
    [self.contentView addSubview:_imageLine];
    
    UIButton *btn1 = [UIButton initButtonWithFrame:CGRectMake(70*scaleX, 9*scaleY, 50*scaleX, 20*scaleY) Title:@"语音" Target:self Selector:@selector(btnAction:)];
    btn1.tag = 100;
    
    UIButton *btn2 = [UIButton initButtonWithFrame:CGRectMake(130*scaleX, 9*scaleY, 50*scaleX, 20*scaleY) Title:@"视频" Target:self Selector:@selector(btnAction:)];
    btn2.tag = 200;
    
    UIButton *btn3 = [UIButton initButtonWithFrame:CGRectMake(190*scaleX, 9*scaleY, 50*scaleX, 20*scaleY) Title:@"图片" Target:self Selector:@selector(btnAction:)];
    btn3.tag = 300;
    
    UIButton *btn4 = [UIButton initButtonWithFrame:CGRectMake(250*scaleX, 9*scaleY, 50*scaleX, 20*scaleY) Title:@"表情" Target:self Selector:@selector(btnAction:)];
    btn4.tag = 400;
    
    [self.contentView addSubview:btn1];
    [self.contentView addSubview:btn2];
    [self.contentView addSubview:btn3];
    [self.contentView addSubview:btn4];
  }
  return self;
}

- (void)btnAction:(UIButton *)sender
{
  switch (sender.tag) {
    case 100:
    {
      NSLog(@"~~~~语音~~~~");
    }
      break;
    case 200:
    {
      NSLog(@"~~~~视频~~~~");
    }
      break;
    case 300:
    {
      NSLog(@"~~~~图片~~~~");
    }
      break;
    case 400:
    {
      NSLog(@"~~~~表情~~~~");
    }
      break;
    default:
      break;
  }
}

- (void)awakeFromNib {
  // Initialization code
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
  [super setSelected:selected animated:animated];

  // Configure the view for the selected state
}

@end
#import 

@interface UIButton (initializer)
/**
 * 初始化button
 *
 * @param frame    button的尺寸
 * @param target    button的目标对象
 * @param selector   点击button所触发的方法
 * @param image    button的背景图片
 * @param imagePressed button高亮时的图片
 *
 * @return button
 */
+ (UIButton *)initButtonWithFrame:(CGRect)frame Target:(id)target Selector:(SEL)selector Image:(NSString *)image ImagePressed:(NSString *)imagePressed;
/**
 * 初始化button
 *
 * @param frame  button的尺寸
 * @param title  button的标题
 * @param target  button的目标对象
 * @param selector 点击button所触发的方法
 *
 * @return button
 */
+ (UIButton *)initButtonWithFrame:(CGRect)frame Title:(NSString *)title Target:(id)target Selector:(SEL)selector;

@end
#import "UIButton+initializer.h"

@implementation UIButton (initializer)

+ (UIButton *)initButtonWithFrame:(CGRect)frame Target:(id)target Selector:(SEL)selector Image:(NSString *)image ImagePressed:(NSString *)imagePressed
{
  UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
  [button setFrame:frame];
  UIImage *newImage = [UIImage imageNamed:image];
  [button setBackgroundImage:newImage forState:0];
  UIImage *newPressedImage = [UIImage imageNamed:imagePressed];
  [button setBackgroundImage:newPressedImage forState:UIControlStateHighlighted];
  [button addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside];
  return button;
}

+ (UIButton *)initButtonWithFrame:(CGRect)frame Title:(NSString *)title Target:(id)target Selector:(SEL)selector
{
  UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
  [button setFrame:frame];
  [button setTitle:title forState:0];
  [button addTarget:target action:selector forControlEvents:UIControlEventTouchUpInside];
  return button;
}

@end

pch文件的代码:

#ifndef QQList_PrefixHeader_pch
#define QQList_PrefixHeader_pch

#define scaleX [UIScreen mainScreen].bounds.size.width/320.0
#define scaleY [UIScreen mainScreen].bounds.size.height/568.0

#endif

总结

以上就是在IOS展开三级列表效果示例的全部内容,希望本文的内容对大家IOS时能有所帮助。


推荐阅读
  • 如何在Android和iOS上捕获应用程序崩溃的日志
    本文详细介绍了如何在Android和iOS设备上收集应用崩溃时的日志,包括所需的工具、步骤以及一些常见的注意事项。 ... [详细]
  • 题目概述:给定一棵带颜色节点的树,目标是找到一种方法,通过删除某些边使得每个连通分量内的节点颜色相同。需要计算出所有可能的合法边集的数量。使用动态规划的方法,特别是树形DP来解决问题。 ... [详细]
  • 在使用Firefox浏览器打开本地HTML文件时,尝试调用Canvas的drawImage方法可能会遇到NS_ERROR_NOT_AVAILABLE错误。本文探讨了这一问题的原因及解决方案。 ... [详细]
  • C语言编程课程第十二课
    本课程将深入探讨C语言中的数组操作与基本算法实现,包括最大最小值交换、数组旋转以及约瑟夫环问题等经典案例分析。 ... [详细]
  • iOS开发中解决‘_OBJC_CLASS_$_JPUSHService’引用错误的方法
    本文详细探讨了在iOS开发过程中遇到的‘_OBJC_CLASS_$_JPUSHService’引用错误,并提供了一系列有效的解决方案。 ... [详细]
  • 如何使用Ionic3框架创建首个混合开发应用
    混合开发是指结合原生(Native)与网页(Web)技术进行移动应用开发的方法。本文将详细介绍如何利用Ionic3这一流行的混合开发框架,从环境搭建到创建并运行首个应用的全过程。 ... [详细]
  • 题目链接:请点击这里。本题将图形视为波动,其中波峰被淹没时部分数减少,而波谷被淹没时部分数增加。因此,需要预先处理所有波峰和波谷的位置。特别地,图形的两端点需要特殊处理,可以通过设置边界条件来简化问题。 ... [详细]
  • Python库在GIS与三维可视化中的应用
    Python库极大地扩展了GIS的能力,使其能够执行复杂的数据科学任务。本文探讨了几个关键的Python库,这些库不仅增强了GIS的核心功能,还推动了地理信息系统向更高层次的应用发展。 ... [详细]
  • 一款专为电脑维修店设计的U盘启动盘制作工具,支持多种操作系统安装与维护。 ... [详细]
  • 本文详细介绍如何在 macOS 上编译 FFmpeg 3.1.1,并将其集成到 iOS 项目中,包括必要的环境配置和代码示例。 ... [详细]
  • 本题来自 BZOJ2004,链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2004。题目要求计算特定条件下的方案数,采用动态规划(DP)解决。由于任意两站间的距离不超过 p,因此每 p 个站点中所有的公交车都必须至少停靠一次。 ... [详细]
  • 2014年4月17日,深入研究了邵杨的代码库,发现代码中的注释较为稀少,影响了理解的效率。同时,学习了一些Eclipse的高效操作技巧。 ... [详细]
  • 深入理解BIO与NIO的区别及其应用
    本文详细探讨了BIO(阻塞I/O)和NIO(非阻塞I/O)之间的主要差异,包括它们的工作原理、性能特点以及应用场景,旨在帮助开发者更好地理解和选择适合的I/O模型。 ... [详细]
  • 面临考试压力,急需解决四个编程问题,包括实现乒乓球的动态效果、计算特定日期是一年的第几天、逆序输出数字以及创建弹出菜单。每个问题的解决都能在TC3.0环境中获得50分。 ... [详细]
  • 在使用 iOS 应用时,遇到网络请求错误是常见的问题。本文将探讨两种常见的错误代码 -1003 和 -1001,并提供详细的解释和解决方案。 ... [详细]
author-avatar
和尚与尼姑离婚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有