有朋友让帮他写一个封装的字数不一的多标签视图,所以今天将代码展示一下,供大家学习

代码中封装了两种方法,分别是: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的更多相关文章

  1. iOS 开发设计常用软件及工具整理

    1, xCode 2, AppCode 3, Skech 原型设计软件 4, Hype 动画设计工具 5, fontawsome 免费图表 6, Prepo icon, images.catlog 生 ...

  2. iOS开发——创建你自己的Framework

    如果你想将你开发的控件与别人分享,一种方法是直接提供源代码文件.然而,这种方法并不是很优雅.它会暴露所有的实现细节,而这些实现你可能并不想开源出来.此外,开发者也可能并不想看到你的所有代码,因为他们可 ...

  3. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  4. iOS 开发总结(上)

    来源:蝴蝶之梦天使 链接:http://www.jianshu.com/p/d333cf6ae4b0 在iOS开发中经常需要使用的或不常用的知识点的总结,几年的收藏和积累(踩过的坑). 一. iPho ...

  5. iOS开发系列--视图切换

    概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController ...

  6. iOS-提高iOS开发效率的方法和工具

    提高iOS开发效率的方法和工具 介绍 这篇文章主要是介绍一下我在iOS开发中使用到的一些可以提升开发效率的方法和工具. IDE 首先要说的肯定是IDE了,说到IDE,Xcode不能跑,当然你也可能同时 ...

  7. iOS开发之新浪微博山寨版代码优化

    之前发表过一篇博客“IOS开发之新浪围脖”,在编写代码的时候太偏重功能的实现了,写完基本功能后看着代码有些别扭,特别是用到的四种cell的类,重复代码有点多,所以今天花点时间把代码重构一下.为了减少代 ...

  8. IOS开发基础知识--碎片47

    1:解决ios静态库中的类别(category)在工程中不能使用 解决方法为:找到 target 的图标,更改其 Other Linker Flags 为: -all_load 或 -force_lo ...

  9. iOS开发UI篇—懒加载

    iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...

随机推荐

  1. [HAOI2015]数字串拆分

    题目描述 你有一个长度为n的数字串.定义f(S)为将S拆分成若干个1~m的数的和的方案数,比如m=2时,f(4)=5,分别为4=1+1+1+1你可以将这个数字串分割成若干个数字(允许前导0),将他们加 ...

  2. 【Luogu P2709 小B的询问】莫队

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  3. hdu 3939(勾股+容斥)

    题意: 给定一个整数L(L<=1e12),计算(x,y,z)组的个数.其中x<y<z,x^2+y^2=z^2,gcd(x,y)==1,gcd(x,z)==1,gcd(y,z)==1. ...

  4. mysql服务无法正常启动

    这个时候多半是ini文件出了问题. 1.去检查你的my.ini的保存编码格式是不是ANSI,如果不是将其改为ANSI (一般我们修改my.ini时,都无法直接保存,而是选择另存为在其他目录下,再去替换 ...

  5. Delphi 打印 Tprinter

    打印          打印对于许多 Windows 程序员来说是十分棘手的问题. Delphi 简化了打印时用户所必须了解的大部分内容.用户可以很轻松地写出简单的打印程序来输出文本和位图化了的图像. ...

  6. Spring boot结合Maven实现不同环境的配置

    配置文件层次: pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...

  7. SQL之排序

    1.按多个列排序 经常需要按不止一个列进行数据排序.例如,如果要显示雇员名单,可能希望按姓和名排序(首先按姓排序,然后在每个姓中再按名排序).如果多个雇员有相同的姓,这样做很有用. 要按多个列排序,简 ...

  8. js生成四位随机数的简便方法

    do out = Math.floor(Math.random()*10000); while( out < 1000 ) alert( out );

  9. java.lang.SecurityException: Prohibited package name:

    Prohibited package name:禁止使用的包名! 改个包名即可,全是这种bug多好啊.

  10. Servlet 执行流程 生命周期 ServletConfig 线程安全

    Day34 servlet 三.如何使用Servlet 1.继承GenericServlet类(通用) (1)GenericServlet类有一个关键的设计,定义了一个私有的ServletConfig ...