效果图如下:

      

 #import <UIKit/UIKit.h>

 @interface AppDelegate : UIResponder <UIApplicationDelegate>

 @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 <UIKit/UIKit.h>

 @interface RootViewController : UIViewController

 @end
 #import "RootViewController.h"
#import "MainCell.h"
#import "DetialTableViewCell.h"
@interface RootViewController ()<UITableViewDataSource,UITableViewDelegate>
{
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(, , *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:@""];
[dic setValue:groupArr1 forKey:@""];
[dic setValue:groupArr2 forKey:@""];
[dic setValue:groupArr3 forKey:@""];
[dic setValue:groupArr4 forKey:@""];
[dic setValue:groupArr5 forKey:@""]; } #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: + section];
imageView.image = [UIImage imageNamed:@"buddy_header_arrow_down"]; NSArray *array1 = dic[string];
return array1.count;
}
return ;
} // 设置表头的高度
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return *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(, , *scaleX, *scaleY)];
view.backgroundColor = [UIColor whiteColor]; UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(*scaleX, *scaleY, tableView.frame.size.width - *scaleX, *scaleY)];
titleLabel.text = [titleDataArray objectAtIndex:section];
[view addSubview:titleLabel]; UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(*scaleX, *scaleY, *scaleX, *scaleY)];
imageView.tag = +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(, , *scaleX, *scaleY);
button.tag = + section;
[button addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
[view addSubview:button]; UIImageView *lineImage = [[UIImageView alloc] initWithFrame:CGRectMake(, *scaleY - , *scaleX, )];
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 *scaleY;
}else{
return *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()%]];
cell.nameLabel.text = dic[indexStr][indexPath.row][@"name"];
cell.IntroductionLabel.text = @"滴滴雨点仿佛似流泪,滴在我冰冷的身躯";
cell.networkLabel.text = @"2G";
}
// ???
if (indexPath.row == dataArray.count - ) {
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 + ) 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 :
{
groupArr0[(path.row-)] = nameAndStateDic;
[groupArr0 removeObjectAtIndex:path.row];
}
break;
case :
{
groupArr1[(path.row-)] = nameAndStateDic;
[groupArr1 removeObjectAtIndex:path.row];
}
break;
case :
{
groupArr2[(path.row-)] = nameAndStateDic;
[groupArr2 removeObjectAtIndex:path.row];
}
break;
case :
{
groupArr3[(path.row-)] = nameAndStateDic;
[groupArr3 removeObjectAtIndex:path.row];
}
break;
case :
{
groupArr4[(path.row-)] = nameAndStateDic;
[groupArr4 removeObjectAtIndex:path.row];
}
break;
case :
{
groupArr5[(path.row-)] = 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 :
{
groupArr0[(path.row-)] = nameAndStateDic;
NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state", nil];
[groupArr0 insertObject:nameAndStateDic1 atIndex:path.row];
}
break;
case :
{
groupArr1[(path.row-)] = nameAndStateDic;
NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state", nil];
[groupArr1 insertObject:nameAndStateDic1 atIndex:path.row];
}
break;
case :
{
groupArr2[(path.row-)] = nameAndStateDic;
NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state", nil];
[groupArr2 insertObject:nameAndStateDic1 atIndex:path.row];
}
break;
case :
{
groupArr3[(path.row-)] = nameAndStateDic;
NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state", nil];
[groupArr3 insertObject:nameAndStateDic1 atIndex:path.row];
}
break;
case :
{
groupArr4[(path.row-)] = nameAndStateDic;
NSMutableDictionary *nameAndStateDic1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"AttachedCell",@"cell",@"YES",@"state", nil];
[groupArr4 insertObject:nameAndStateDic1 atIndex:path.row];
}
break;
case :
{
groupArr5[(path.row-)] = 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-)]; //数组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 <UIKit/UIKit.h>

 @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(*scaleX, *scaleY, *scaleX, *scaleX)];
[self.contentView addSubview:_Headerphoto];
// 名字
_nameLabel = [[UILabel alloc] initWithFrame:CGRectMake(*scaleX, *scaleY, *scaleX, *scaleX)];
_nameLabel.font = [UIFont systemFontOfSize:];
[self.contentView addSubview:_nameLabel];
// 简介
_IntroductionLabel = [[UILabel alloc] initWithFrame:CGRectMake(*scaleX, *scaleY, *scaleX, *scaleX)];
_IntroductionLabel.backgroundColor = [UIColor clearColor];
_IntroductionLabel.textColor = [UIColor lightGrayColor];
_IntroductionLabel.font = [UIFont systemFontOfSize:];
[self.contentView addSubview:_IntroductionLabel]; // 网络
_networkLabel = [[UILabel alloc] initWithFrame:CGRectMake(*scaleX, *scaleY, *scaleX, *scaleY)];
_networkLabel.backgroundColor = [UIColor clearColor];
_networkLabel.textColor = [UIColor lightGrayColor];
_networkLabel.font = [UIFont systemFontOfSize:];
[self.contentView addSubview:_networkLabel]; // 分割线
_imageLine = [[UIImageView alloc] initWithFrame:CGRectMake(*scaleX, *scaleY - , ( - )*scaleX, )];
[self.contentView addSubview:_imageLine];
}
return self;
} @end
 #import <UIKit/UIKit.h>

 @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(*scaleX, *scaleY - , ( - )*scaleY, )];
[self.contentView addSubview:_imageLine]; UIButton *btn1 = [UIButton initButtonWithFrame:CGRectMake(*scaleX, *scaleY, *scaleX, *scaleY) Title:@"语音" Target:self Selector:@selector(btnAction:)];
btn1.tag = ; UIButton *btn2 = [UIButton initButtonWithFrame:CGRectMake(*scaleX, *scaleY, *scaleX, *scaleY) Title:@"视频" Target:self Selector:@selector(btnAction:)];
btn2.tag = ; UIButton *btn3 = [UIButton initButtonWithFrame:CGRectMake(*scaleX, *scaleY, *scaleX, *scaleY) Title:@"图片" Target:self Selector:@selector(btnAction:)];
btn3.tag = ; UIButton *btn4 = [UIButton initButtonWithFrame:CGRectMake(*scaleX, *scaleY, *scaleX, *scaleY) Title:@"表情" Target:self Selector:@selector(btnAction:)];
btn4.tag = ; [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 :
{
NSLog(@"~~~~语音~~~~");
}
break;
case :
{
NSLog(@"~~~~视频~~~~");
}
break;
case :
{
NSLog(@"~~~~图片~~~~");
}
break;
case :
{
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 <UIKit/UIKit.h>

 @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:];
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:];
[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 列表三级展开的更多相关文章

  1. [iOS] 列表滑动展开隐藏头部HeaderView

    平常遇到大多数的带有列表的应用都会遇到这个场景:在列表顶端有一个Header,当向上滑动列表时,压缩header,向下滑动列表到头时,展开header.这种样式在例如微博,twitter这些展示动态的 ...

  2. el-upload上传列表实现 展开 收起

    # el-upload上传列表实现 展开 收起 #### 无图言*,所以先上最终效果图(想参考代码的可以直接滑到最后) ### 具体实现思路 注意: 每个人的项目环境以及需求,都不尽相同,所以这里仅仅 ...

  3. (二十八)QQ好友列表的展开收缩

    要通过监听HeaderView上面的Button来进行操作: 通过addTarget方法即可,应该将按钮的点击方法封装在HearView控制器内部. 列表收起来的原理: tableView: numb ...

  4. Html 列表实现展开和收起

    HTML中,点击列表元素,在其下展开更多的小选项.不点的时候是收起来的.就是实现路由器左边的菜单那样的功能.怎么实现,知道的指点一下,谢谢了!! 最常见的方法是通过Javascript控制某标签的CS ...

  5. Python笔记24-----迭代器、生成器的使用(如嵌套列表的展开、树的遍历等)

    1.递归yield使用: 嵌套列表展开 def flatten(nested): if type(nested)==list: for sublist in nested: for i in flat ...

  6. IOS列表实现动态多列

    . //图片列表 NSMutableArray *pictureList; //分组列表 NSMutableArray *indexArr; - (UITableViewCell *)tableVie ...

  7. vue | vue实现列表同时展开与单独展开

    需求:每个li标签在点击的时候,都同时展开. 但是碰见几个问题: 1.如果点第一个li 所有li都会展开: 2.点击第一个li,第一个li展开,点击第二个li,第一个li闭合,第二个li展开 这两种情 ...

  8. 手机端仿ios的三级联动脚本四

    二,脚本 <script> $("#city-picker").cityPicker({ title: "选择省市区/县", onChange: f ...

  9. tableView 三级展开 嵌入collocationView

    目前有个需求,需要在写一个文件夹结构的类型,tableView分类显示 collocationView 遇到的问题是:tableView cell中嵌套了 collocationView 后,coll ...

随机推荐

  1. Log4j_学习_03_自己动手封装log工具

    二.参考资料 1.log4j 是否可以通过条件判断 在程序运行中动态选择日志存储目录 2.log4j删除N天前日志实现

  2. php代码性能分析

    最近在项目中嵌入wordpress,发现wordpress效率非常低,针对此问题进行了部分优化. 1.首先增加redis缓存,通过index.php入口处进行全页面缓存(数据量不大,数据更新频率低,因 ...

  3. LeetCode 369. Plus One Linked List

    原题链接在这里:https://leetcode.com/problems/plus-one-linked-list/ 题目: Given a non-negative number represen ...

  4. 学习动态性能表(10)--v$session_longops

    学习动态性能表 第十篇--V$SESSION_LONGOPS  2007.6.7 本视图显示运行超过6秒的操作的状态.包括备份,恢复,统计信息收集,查询等等. 要监控查询执行进展状况,你必须使用cos ...

  5. IE8提示console未定义

    在开发的过程中由于调试的原因,在代码中加入console.info("xxxx"),而未进行删除 在IE8下测试该代码所在的页面报错,如下: 需要注意的是,使用console对象查 ...

  6. ZIP 算法详解 (转!)

    zip 的压缩原理与实现(lz77 算法压缩) 无损数据压缩是一件奇妙的事情,想一想,一串任意的数据能够根据一定的规则转换成只有原来 1/2 - 1/5 长度的数据,并且能够按照相应的规则还原到原来的 ...

  7. 洛谷【P2669】NOIP2015普及组 T1金币

    我对模拟的理解:http://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.luogu.org/problemnew/show/P266 ...

  8. 添加gitolite用户和仓库

    1.在linux工作机上生成密钥对 ssh-keygen -t rsa 输入用户名但不输入passphrase,这样连接时就不用每次都输入passphrase了. 2.添加用户和仓库 在管理员的工作机 ...

  9. 聊聊 SQL Joins

    SQL 中的 Join 有以下几种类型: 1.Cross Join 交叉连接,没有条件筛选,返回笛卡尔积. 如果以 ,(逗号)分隔表名进行查询如 select * from tbl_name1, tb ...

  10. Ubuntu下设置VNCServer

    Ubuntu下设置VNCServer Virtual Network Computing(VNC)是进行远程桌面控制的一个软件.客户端的键盘输入和鼠标操作通过网络传输到远程服务器,控制服务器的操作.服 ...