iOS开发之字数不一的多标签Demo
有朋友让帮他写一个封装的字数不一的多标签视图,所以今天将代码展示一下,供大家学习
代码中封装了两种方法,分别是:1.传递数组,数组中是NSString类型的方法;2.传递数组,数组中是NSDictionary类型的方法
首先介绍:1.传递数组,数组中是NSString类型的方法;
//初始化数组中是NSString类型的标签视图
-(instancetype)initWithFrame:(CGRect)frame textArray:(NSArray *)aArray textFont:(UIFont *)aFont
{
self = [super initWithFrame:frame];
if (self)
{
//首先获取宽、高,确定显示的位置
CGFloat widthF = frame.size.width;
//CGFloat heightF = frame.size.height;
//然后创建标签视图,注意:这个方法传过来的数组中就是NSString类型,可以直接显示
CGFloat labelWidthF = 0.0f;
CGFloat labelHeightF = 0.0f;
for (int i = 0; i < aArray.count; i++)
{
NSString *str = aArray[i];
CGSize strSize = [self sizeWithFont:str font:aFont maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)];
//labelWidthF=labelWidthF+strSize.width+10;
//判断宽、高
if (widthF < labelWidthF+strSize.width+10)
{
labelWidthF=0.0f;
labelHeightF = labelHeightF+strSize.height+10;
}
UILabel *labelL = [[UILabel alloc] initWithFrame:CGRectMake(labelWidthF, labelHeightF, strSize.width+10, strSize.height+10)];
labelL.text = str;
labelL.textAlignment = NSTextAlignmentCenter;
labelL.backgroundColor = [UIColor lightGrayColor];
labelL.font = aFont;
[self addSubview:labelL];
labelWidthF=labelWidthF+strSize.width+10;
}
}
return self;
}
记住一定要计算控件的宽高,否则容易无法多行显示
第二种方式:2.传递数组,数组中是NSDictionary类型的方法
//初始化数组中是NSDictionary类型的标签视图
-(instancetype)initWithFrame:(CGRect)frame textArray:(NSArray *)aArray keyStr:(NSString *)aKeyStr textFont:(UIFont *)aFont
{
self = [super initWithFrame:frame];
if (self)
{
//首先获取宽、高,确定显示的位置
CGFloat widthF = frame.size.width;
//CGFloat heightF = frame.size.height;
//然后创建标签视图,注意:这个方法传过来的数组中就是NSString类型,可以直接显示
CGFloat labelWidthF = 0.0f;
CGFloat labelHeightF = 0.0f;
for (int i = 0; i < aArray.count; i++)
{
NSDictionary *dic = aArray[i];
NSString *str = dic[aKeyStr];
CGSize strSize = [self sizeWithFont:str font:aFont maxSize:CGSizeMake(MAXFLOAT, MAXFLOAT)];
//labelWidthF=labelWidthF+strSize.width+10;
//判断宽、高
if (widthF < labelWidthF+strSize.width+10)
{
labelWidthF=0.0f;
labelHeightF = labelHeightF+strSize.height+10;
}
UILabel *labelL = [[UILabel alloc] initWithFrame:CGRectMake(labelWidthF, labelHeightF, strSize.width+10, strSize.height+10)];
labelL.text = str;
labelL.textAlignment = NSTextAlignmentCenter;
labelL.backgroundColor = [UIColor lightGrayColor];
labelL.font = aFont;
[self addSubview:labelL];
labelWidthF=labelWidthF+strSize.width+10;
}
}
return self;
}
方法设定完成,进行调用
NSArray *arr1 = @[@"哈哈哈",@"呵呵",@"嘻嘻嘻嘻",@"嘿",@"么么么么么么",@"面朝大海,春暖花开",@"好好学习,天天向上,加油!"];
BHMoreLabelView *bhMoreLV1 = [[BHMoreLabelView alloc] initWithFrame:CGRectMake(0, 170, self.view.frame.size.width, 100) textArray:arr1 textFont:[UIFont systemFontOfSize:15]];
//bhMoreLV1.backgroundColor = [UIColor cyanColor];
[self.view addSubview:bhMoreLV1];
NSArray *arr2 = @[@{@"name":@"哈哈哈"},@{@"name":@"呵呵"},@{@"name":@"嘻嘻嘻嘻"},@{@"name":@"嘿"},@{@"name":@"么么么么么么"},@{@"name":@"面朝大海,春暖花开"}];
BHMoreLabelView *bhMoreLV2 = [[BHMoreLabelView alloc] initWithFrame:CGRectMake(0, 300, self.view.frame.size.width, 100) textArray:arr2 keyStr:@"name" textFont:[UIFont systemFontOfSize:15]];
//bhMoreLV2.backgroundColor = [UIColor redColor];
[self.view addSubview:bhMoreLV2];
效果展示图:
源码下载(有问题欢迎大家留言交流......):http://download.csdn.net/detail/hbblzjy/9665255
iOS开发之字数不一的多标签Demo的更多相关文章
- iOS 开发设计常用软件及工具整理
1, xCode 2, AppCode 3, Skech 原型设计软件 4, Hype 动画设计工具 5, fontawsome 免费图表 6, Prepo icon, images.catlog 生 ...
- iOS开发——创建你自己的Framework
如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件.然而,这种方法并不是很优雅.它会暴露所有的实现细节,而这些实现你可能并不想开源出来.此外,开发者也可能并不想看到你的所有代码,因为他们可 ...
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- iOS 开发总结(上)
来源:蝴蝶之梦天使 链接:http://www.jianshu.com/p/d333cf6ae4b0 在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPho ...
- iOS开发系列--视图切换
概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController ...
- iOS-提高iOS开发效率的方法和工具
提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...
- iOS开发之新浪微博山寨版代码优化
之前发表过一篇博客“IOS开发之新浪围脖”,在编写代码的时候太偏重功能的实现了,写完基本功能后看着代码有些别扭,特别是用到的四种cell的类,重复代码有点多,所以今天花点时间把代码重构一下.为了减少代 ...
- IOS开发基础知识--碎片47
1:解决ios静态库中的类别(category)在工程中不能使用 解决方法为:找到 target 的图标,更改其 Other Linker Flags 为: -all_load 或 -force_lo ...
- iOS开发UI篇—懒加载
iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...
随机推荐
- [NOI 2011]道路修建
Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道 ...
- [HNOI2014]世界树
题目描述 世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界.在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平是使世界树能够生生不息.持续运转的根本基 ...
- 【LSGDOJ1383】修改回文 dp
题目描述 为了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号 当牛走过这个系统时,牛的名字将被自动读入. 每一头牛的电子名字是一个长度为M (1 <= M & ...
- [bzoj1566][NOI2009]管道取珠
来自FallDream的博客,未经允许,请勿转载,谢谢. n<=500 神题...... 发现这个平方可以看作两个序列相同的对数 然后就可以表示状态了. f[i][j][k]表示两个序列各选了 ...
- 如何导入python中的模块
作为一名新手Python程序员,你首先需要学习的内容之一就是如何导入模块或包.但是我注意到,那些许多年来不时使用Python的人并不是都知道Python的导入机制其实非常灵活.在本文中,我们将探讨以下 ...
- iOS核心面试题
1,请简述你对协议的理解? protocol无论是在那个领域都是一种约束,规范.在OC中的协议主要用于在各个类之间进行回调传值. 协议有 委托方,代理方, 委托方是协议的制定者,需要声明协议的方 ...
- 15_Python模块化编程_Python编程之路
之前跟大家讲的是一些python的数据基础,从这篇文章开始,我们开始正式学习python的模块化编程 下面我们解释一下什么叫做模块 之前已经讲过怎么去定义一个方法,如果你是用python交互器(自带交 ...
- CSS缩写的样式
熟悉和了解CSS的朋友都知道,CSS样式表有很多缩写方式.比如,定义字体.定义背景等,都可以把CSS代码缩写到一行.为了能更好的搞清楚CSS缩写方法,我收集整理了一些有关CSS简写的参考资料,也是对自 ...
- java web中filter分析
摘自博客园,博主孤傲苍狼 一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp ...
- python中删除某个元素的3种方法
python中关于删除list中的某个元素,一般有三种方法:remove.pop.del 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除 举例说明: >>> st ...