#import <UIKit/UIKit.h>
//委托者做三件事:
//1.指定协议
@protocol SectionHeaderViewDelegate <NSObject>
-(void)changedIsAppear;
@end
@interface SectionHeaderView : UIView
@property(nonatomic,strong)UIButton *btn;
@property(nonatomic,assign)BOOL isAppear;//是否展开
//2.声明代理指针
@property(nonatomic,assign)id<SectionHeaderViewDelegate> delegate;
@end
#import "SectionHeaderView.h"
@implementation SectionHeaderView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.btn = [UIButton buttonWithType:UIButtonTypeCustom];
self.btn.frame = self.bounds;
[self.btn setBackgroundImage:[UIImage imageNamed:@"btn_on"] forState:UIControlStateNormal];
[self.btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];
[self addSubview:self.btn];
}
return self;
}
-(void)btnClick{
self.isAppear = !self.isAppear;
//3.在合适的时机调用协议方法
[self.delegate changedIsAppear];
}
@end
#import "RootViewController.h"
#import "FriendModelManager.h"
#import "SectionHeaderView.h"
@interface RootViewController ()<UITableViewDataSource,UITableViewDelegate,SectionHeaderViewDelegate>
{
NSMutableArray *_dataArray;//数据源
UITableView *_myTableView;
NSMutableArray *_headViewArray;//保存所有的头部视图
}
@end
@implementation RootViewController
-(void)requestData{
_dataArray = [[FriendModelManager allFriendsModel] mutableCopy];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.automaticallyAdjustsScrollViewInsets = NO;
//请求数据
[self requestData];
//创建tableView
[self creatTableView];
//创建section的头部视图
[self creatSectionHeadView];
}
-(void)creatSectionHeadView{
_headViewArray = [[NSMutableArray alloc] init];
//循环创建5个头部视图,把5个视图依此加入到一个数组里
for (int i = 0; i<_dataArray.count; i++) {
SectionHeaderView *headView = [[SectionHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 50)];
[headView.btn setTitle:[NSString stringWithFormat:@"%d组",i+1] forState:UIControlStateNormal];
//指定代理对象
headView.delegate = self;
[_headViewArray addObject:headView];
}
}
-(void)creatTableView{
_myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height-64) style:UITableViewStyleGrouped];
_myTableView.delegate = self;
_myTableView.dataSource = self;
[self.view addSubview:_myTableView];
//注册Cell
[_myTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CellName"];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - UITableViewDataSource
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [_dataArray count];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
SectionHeaderView *view = _headViewArray[section];
return view.isAppear?[_dataArray[section] count]:0;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellName" forIndexPath:indexPath];
FriendModel *model = _dataArray[indexPath.section][indexPath.row];
cell.imageView.image = [UIImage imageNamed:model.icon];
cell.textLabel.text = model.name;
return cell;
}
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
return _headViewArray[section];
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 50;
}
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return 0.1;
}
#pragma mark - SectionHeaderViewDelegate
-(void)changedIsAppear
{
//刷新tableView
[_myTableView reloadData];
}
@end
iOS 仿QQ折叠 iOS
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 整体结构## 封装一个基本转场动画的公共父类LZBBaseTransition.h,用于实现一些基本共同的操作 以...
- 最近手上任务比较轻,打算把一些之前做一些的简单的东西再整理整理,优化一下,做个记录; TableView的折叠拉伸...
- 1. 实现效果: 项目中需要添加一个效果,弹出弹框时,底部控制器向内凹陷,类似淘宝加入购物车动画效果,如下图: 2...
- 前言 要解析 lrc 格式的歌词, 首先需要知道什么是 lrc 歌词, 还需要知道 lrc 歌词的规范. 在这里先...
- 最近因为项目需要,要实现一种导航栏提示的功能,为了偷懒就到网上搜索了下类似功能,后来发现不太好用,尤其是windo...