iOS中"查看更多/收起"功能实现
实现效果如图:

查看更多功能在很多app种都有应用,在这里简单的实现,介绍实现流程:
一个tableViewCell中包含一个collectionView,"查看更多"按钮是tableView的footerView
在控制器中ViewController .m中
#import "ViewController.h"
#import "ZSTableViewCell.h" @interface ViewController ()<UITableViewDelegate,UITableViewDataSource> @property (nonatomic,strong) UITableView *tableView; //存放标题的数组
@property (nonatomic,strong) NSArray *titleArray; @property (nonatomic,strong) UIButton *changeButton; @property (nonatomic,assign) BOOL isOpen; @property (nonatomic,assign) NSInteger showButtonNumber; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad]; self.tableView = [[UITableView alloc]initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStylePlain]; [self.view addSubview:self.tableView]; self.tableView.delegate = self;
self.tableView.dataSource = self; [self.tableView registerClass:[ZSTableViewCell class] forCellReuseIdentifier:@"TheCell"]; self.title = @"查看更多/收起";
self.isOpen = NO;
[self.changeButton setTitle:@"查看更多" forState:UIControlStateNormal];
self.changeButton.backgroundColor = [UIColor clearColor]; UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
flowLayout.itemSize = CGSizeMake(([UIScreen mainScreen].bounds.size.width - )/, );
_showButtonNumber = ;
_titleArray = @[@"东方不败",@"岳不群",@"林平之",@"令狐冲",@"岳灵珊",@"任我行",@"左冷禅",@"蓝凤凰",@"向问天",@"田伯光",@"风清扬",@"任盈盈",@"路人甲",@"路人乙",@"路人丙"];
}
#pragma mark --懒加载
//查看更多/收起按钮
- (UIButton *)changeButton{
if (_changeButton == nil) {
_changeButton = [UIButton buttonWithType:UIButtonTypeCustom];
_changeButton.frame = CGRectMake(, , [UIScreen mainScreen].bounds.size.width, );
[_changeButton addTarget:self action:@selector(buttonClick:) forControlEvents:UIControlEventTouchUpInside];
[_changeButton setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[_changeButton setBackgroundColor:[UIColor whiteColor]];
_changeButton.layer.cornerRadius = ;
_changeButton.layer.masksToBounds = YES;
_changeButton.layer.borderWidth = ;
_changeButton.layer.borderColor = [UIColor greenColor].CGColor; }
return _changeButton;
}
//button点击事件
- (void)buttonClick:(UIButton *)sender{
//如果不是展开状态
if (self.isOpen == NO) {
[self.changeButton setTitle:@"收起" forState:UIControlStateNormal];
self.isOpen = YES;
_showButtonNumber = _titleArray.count; }else{
[self.changeButton setTitle:@"查看更多" forState:UIControlStateNormal];
self.isOpen = NO;
_showButtonNumber = ;
}
//刷新 动画效果 第0个section NSIndexSet索引集合
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:] withRowAnimation:(UITableViewRowAnimationAutomatic)];
/* UITableViewRowAnimationFade, 消失
UITableViewRowAnimationRight, 从右滑行 // slide in from right (or out to right)
UITableViewRowAnimationLeft,
UITableViewRowAnimationTop,
UITableViewRowAnimationBottom,
UITableViewRowAnimationNone, // available in iOS 3.0
UITableViewRowAnimationMiddle,
UITableViewRowAnimationAutomatic 自动
*/ } #pragma mark --
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return ;
} - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return ;
} - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
//根据标识返回不同的高度
if (self.isOpen == YES) {
//因为每行有4个item,要多出空余的item
CGFloat height = (self.titleArray.count / + ) * ;
return height;
}else{
return ;
}
} - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.5;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
return ;
} - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
ZSTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TheCell" forIndexPath:indexPath];
[cell setupCellWithNum:_showButtonNumber ButtonNameArr:_titleArray]; cell.buttonClick = ^(NSInteger index){
NSLog(@"点击的按钮标签为%ld",index);
}; return cell;
}
//footview
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section{
UIView *firstFootView = [[UIView alloc]initWithFrame:self.changeButton.frame];
[firstFootView addSubview:self.changeButton];
firstFootView.backgroundColor = [UIColor orangeColor];
return firstFootView;
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end
在tableViewCell的.h中
#import <UIKit/UIKit.h> @interface ZSTableViewCell : UITableViewCell
//点击cell的回调
@property (nonatomic,copy) void (^buttonClick)(NSInteger index); - (void)setupCellWithNum:(NSInteger)buttonCount ButtonNameArr:(NSArray *)buttonArray; @end
tableViewCell的.m
#import "ZSTableViewCell.h"
#import "TheItemCell.h" @interface ZSTableViewCell ()<UICollectionViewDataSource,UICollectionViewDelegate> @property (nonatomic,strong) UICollectionView *collectionView; @property (nonatomic,assign) NSInteger cellNum;//接受控制器传来的数组个数 @property (nonatomic,strong) NSArray *buttonTitleArray; @end
@implementation ZSTableViewCell - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ self = [super initWithStyle: style reuseIdentifier:reuseIdentifier];
if (self) { //流水布局
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
flowLayout.itemSize = CGSizeMake(([UIScreen mainScreen].bounds.size.width - )/, );
//行间距
flowLayout.minimumLineSpacing = ;
//列间距
flowLayout.minimumInteritemSpacing = ;
//设置item偏移量 上 左 下 右
flowLayout.sectionInset = UIEdgeInsetsMake(, , , );
self.collectionView.scrollEnabled = NO; CGFloat height = ( / +) * ;
self.collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(, , [UIScreen mainScreen].bounds.size.width,height) collectionViewLayout:flowLayout];
[self.contentView addSubview:self.collectionView];
//注册,必须先创建完collectionView,并且添加到父控件,才能注册,不然会报错
[self.collectionView registerClass:[TheItemCell class] forCellWithReuseIdentifier:@"Cell"];
self.collectionView.backgroundColor = [UIColor whiteColor];
self.backgroundColor = [UIColor orangeColor];
} self.collectionView.delegate = self;
self.collectionView.dataSource = self;
return self;
} - (void)setupCellWithNum:(NSInteger)buttonCount ButtonNameArr:(NSArray *)buttonArray{
self.cellNum = buttonCount;
self.buttonTitleArray = buttonArray;
[self.collectionView reloadData];
}
#pragma mark --
//返回item
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
NSLog(@"%ld",(long)_cellNum);
return _cellNum;
}
//返回组
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
return ;
} - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
TheItemCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
cell.label.text = self.buttonTitleArray[indexPath.item];
cell.backgroundColor = [UIColor blueColor];
return cell;
}
//点击cell
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
self.buttonClick(indexPath.row);
} - (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated]; // Configure the view for the selected state
} @end
在collectionViewCell.h
#import <UIKit/UIKit.h> @interface TheItemCell : UICollectionViewCell @property (nonatomic,strong) UILabel *label; @end
collectionViewCell的.m中
#import "TheItemCell.h"
@implementation TheItemCell
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.label = [[UILabel alloc]initWithFrame:self.bounds];
self.label.textAlignment = NSTextAlignmentCenter;
[self.contentView addSubview:self.label];
}
return self;
}
@end
iOS中"查看更多/收起"功能实现的更多相关文章
- iOS Masonry 查看更多 收起
Masonry 查看更多 收起效果实现,带动画 demo下载地址: https://github.com/qqcc1388/MasonryDemo
- 如何在ios中集成微信登录功能
在ios中集成微信的登录功能有两种方法 1 用微信原生的api来做,这样做的好处就是轻量级,程序负重小,在Build Settings 中这样设置 然后设置 友盟的设置同上,但是要注意,加入你需要的所 ...
- ovs加dpdk在日志中查看更多运行细节的方法
想查看更多dpdk+ovs的更多运行细节,可以采用以下方法,增加更多运行日志. 在终端输入: ovs-appctl vlog/set dpdk:file:dbg ovs-appctl vlog/set ...
- iOS中键盘的收起
在UIViewController中收起键盘,除了调用相应控件的resignFirstResponder方法之外,还有另外三种方法: 重载UIViewController中的touchesBegin方 ...
- win10 关闭 “在时间线中查看更多日期” 提示
在组策略中,禁用允许上传用户活动
- iOS中打电话、打开网址、发邮件、发短信等
常用小功能 小功能简介 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话-方法1 最简单最直接的方式:直接跳到拨号界面 NSURL *url = [ ...
- iOS 用UISearchDisplayController实现查找功能
UISearchDisplayController是iOS中用于处理搜索功能的控制器,此控制器需要和UISearchBar结合使用 示例代码如下: // // WKRootViewController ...
- JS点击查看更多内容 控制段落文字展开折叠
JavaScript+jQuery实现的文字展开折叠效果,点击文字后文字内容会完整的显示出来,控制段落来显示文字,不需要的时候,可以再次点击后将内容折叠起来,也就是隐藏了一部分内容.点击查看更多的功能 ...
- 微信小程序——收起和查看更多功能
项目中做一些列表的时候,可能会需要做到 查看更多 及 收起功能,如下图所示: 大概的需求就是默认只显示2条,点击[查看更多]显示全部,点击[收起]还原. 实现的方法千万种.我来讲一下我的实现思路: 1 ...
随机推荐
- js跨域访问,No ‘Access-Control-Allow-Origin‘ header is present on
在本地用ajax跨域访问请求时报错: XMLHttpRequest cannot loadhttp://www.zjblogs.com/. No 'Access-Control-Allow-Origi ...
- Augular JS里的各种ng
Augular JS里的各种ng- 正文: 1.ng-disabled="一种状态:该状态下不可用"例如: %button.btn.btn-2(ng-disabled=" ...
- hibernate ——helloWorld程序(annotation配置)
在 <hibernate ——helloWorld程序(XML配置)>基础上,修改.添加部分文件: 1.Teacher类和Teacher表 package com.pt.hiberna ...
- 给postgresql 创建新的用户
\du 查看当前postgresql的用户,一般此时只能看到 postgres create user ysr superuser password '123456'; \du 就可以看到两个用户了. ...
- selection与range笔记
selection对象代表当前激活选中区,通常是高亮的文本块 创建选中区: 1.拖拽文本 2.脚本创建 cerateRange() 获取selection对象 IE document.sele ...
- oracle多种导入导出数据方法
dmp格式: 1.dmp格式的导出可以通过客户端工具(PL/SQL)操作来完成,通过菜单栏---->Tools---->Export Tables,然后设置勾选相应参数即可,rows代表是 ...
- CodeForces 719B Anatoly and Cockroaches 思维锻炼题
题目大意:有一排蟑螂,只有r和b两种颜色,你可以交换任意两只蟑螂的位置,或涂改一个蟑螂的颜色,使其变成r和b交互排列的形式.问做少的操作次数. 题目思路:更改后的队列只有两种形式:长度为n以r开头:长 ...
- LightOJ 1341 Aladdin and the Flying Carpet 算数基本定理
题目大意:给出面积n,和最短边m,求能形成的矩形的个数(不能为正方形). 题目思路:根据算数基本定理有: 1.每个数n都能被分解为:n=p1^a1*p2^a2*^p3^a3……pn^an(p为素数); ...
- \t 的理解
在同一个缓冲区内横向跳8个空格. 如果在 \t 前面有字符串,则包括 \t之前出现的字符串之内一共是8个空格.
- HDU2952:Counting Sheep(DFS)
Counting Sheep Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...