本文转载至 http://www.mobile-open.com/2015/86578.html

TYAttributedLabel 简单,强大的属性文本的控件(无需了解CoreText),支持图文混排显示,支持添加链接,image和UIView控件,支持自定义排版显示

更新:

v2.4 修复imge放大bug,新增imageAlignment 和 autolayout支持,以及相应的demo,感谢xinzhengzhang,nonstriater

v2.3 新增 做题demo,代码优化(4s真机测试tableview列表非常流畅)

v2.2 新增 TYImagecache类,新增 image URL 下载缓存,功能优化,改进

v2.1 添加 tableViewCell demo, cell 滚动非常流畅

v2.0 重构优化代码,性能提升,稳定(已在项目中使用), 分离出TYTextContainer ,可以提前生成,也可以生成attributedString,显著提升cell滑动场景流畅度,可以和微博一样流畅

v1.2 添加设置行数,修复bug,增强稳定性

v1.1 添加链接高亮效果,链接便利方法,长按手势代理,优化代码

ScreenShot

新-做题demo

weibo demo 使用TYAttributedLabel 截图

Requirements

  • Xcode 5 or higher
  • Apple LLVM compiler
  • iOS 6.0 or higher
  • ARC

Features

  • 支持富文本,图文混排显示,支持行间距 字间距,设置行数,自适应高度
  • 支持添加高度自定义文本属性
  • 支持添加属性文本,自定义链接,新增高亮效果显示(文字和背景)
  • 支持添加UIImage和UIView控件

Demo

运行demo可以查看效果,而且在demo中,针对各种文本和图文的实现都有详细的用例,每个头文件中都有详细的用法注释,这里简单的介绍下用法

Usage

API Quickstart

  • Category And Protocol
Class Function
NSMutableAttributedString (TY) category提供便利color,font CharacterSpacing,UnderlineStyle,ParagraphStyle的属性添加,无需了解复杂的CoreText
TYTextStorageProtocol 自定义文本属性 遵守最基本的协议 即可 addTextStorage 添加进去
TYAppendTextStorageProtocol 自定义文本属性协议 遵守即可appendTextStorage 添加进去
TYLinkStorageProtocol 自定义文本链接属性 继承TYAppendTextStorageProtocol
TYDrawStorageProtocol 自定义显示内容协议 如 UIImage UIView

下层协议继承上层的协议,如果觉得复杂,其实我已经实现了常用的自定义属性,拿来就可以用,或者继承,添加你想要的

  • Label And Storage
Class Function
TYAttributedLabel 简单易用的属性文本,富文本的显示控件,

addTextStorage在已经设置文本的基础上添加属性,image或者view,

appendTextStorage(无需事先设置文本)直接添加属性,image或者view到最后

TYTextContainer 文本容器,可以提前生成,也可以生成attributedString,显著提升cell滚动流畅度
TYTextStorage 自定义文本属性,支持textColor,font,underLineStyle
TYLinkTextStorage 自定义链接属性,继承TYTextStorage,支持点击代理
TYDrawStorage 自定义显示内容属性,如UIImage,UIView,支持点击代理
TYImageStorage 自定义图片显示,继承TYDrawStorage
TYViewStorage 自定义UIView控件,继承TYDrawStorage
TYImageCache image缓存类,支持URL请求

如果需要更加详细的内容,请看各个头文件,有详细的注释

Delegate

1 <span style="font-size: medium;">// 点击代理
2 - (void)attributedLabel:(TYAttributedLabel *)attributedLabel textStorageClicked:(id<TYTextStorageProtocol>)textStorage atPoint:(CGPoint)point;
3  
4 // 长按代理 有多个状态 begin, changes, end 都会调用,所以需要判断状态
5 - (void)attributedLabel:(TYAttributedLabel *)attributedLabel textStorageLongPressed:(id<TYTextStorageProtocol>)textStorage onState:(UIGestureRecognizerState)state atPoint:(CGPoint)point;</span>

Examples

  • appendStorage demo
1 <span style="font-size: medium;">TYAttributedLabel *label = [[TYAttributedLabel alloc]init];
2 [self.view addSubview:label];
3  
4 // 文字间隙
5 label.characterSpacing = 2;
6 // 文本行间隙
7 label.linesSpacing = 6;
8  
9 NSString *text = @"/t总有一天你将破蛹而出,成长得比人们期待的还要美丽。/n";
10 [label appendText:text];
11  
12 NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]initWithString:text];
13 [attributedString addAttributeTextColor:[UIColor blueColor]];
14 [attributedString addAttributeFont:[UIFont systemFontOfSize:15]];
15 [label appendTextAttributedString:attributedString];
16  
17 [label appendImageWithName:@"CYLoLi" size:CGSizeMake(CGRectGetWidth(label.frame), 180)];
18  
19 UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"CYLoLi"]];
20 imageView.frame = CGRectMake(0, 0, CGRectGetWidth(label.frame), 180);
21 [label appendView:imageView];
22  
23 [label setFrameWithOrign:CGPointMake(0,0) Width:CGRectGetWidth(self.view.frame)];</span>

addStorage demo

1 <span style="font-size: medium;">TYAttributedLabel *label = [[TYAttributedLabel alloc]initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.frame), 0)];
2 [self.view addSubview:label];
3  
4 NSString *text = @"/t总有一天你将破蛹而出,成长得比人们期待的还要美丽。/n";
5 [label setText:text];
6  
7 // 文字间隙
8 label.characterSpacing = 2;
9 // 文本行间隙
10 label.linesSpacing = 6;
11  
12 textStorage = [[TYTextStorage alloc]init];
13 textStorage.range = ;
14 textStorage.textColor = RGB(0, 155, 0, 1);
15 textStorage.font = [UIFont systemFontOfSize:18];
16 [label addTextStorage:textStorage];
17  
18 [label addLinkWithLinkData:@"www.baidu.com" range:NSMakeRange(5, 8)];
19  
20 [label addImageWithName:@"haha" range:NSMakeRange(2, 1)];
21  
22 UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"CYLoLi"]];
23 imageView.frame = CGRectMake(0, 0, CGRectGetWidth(label.frame), 180);
24 [label addView:imageView range:NSMakeRange(16, 1)];
25  
26 [label sizeToFit];</span>
  • TextContainer demo
1 <span style="font-size: medium;">NSString *text = @"/t总有一天你将破蛹而出,成长得比人们期待的还要美丽。/n";
2 TYTextContainer *textContainer = [[TYTextContainer alloc]init];
3     textContainer.text = text;
4     // 文字间隙
5 textContainer.characterSpacing = 2;
6 // 文本行间隙
7 textContainer.linesSpacing = 5;
8  
9 textStorage = [[TYTextStorage alloc]init];
10 textStorage.range = ;
11 textStorage.textColor = RGB(0, 155, 0, 1);
12 textStorage.font = [UIFont systemFontOfSize:18];
13 [textContainer addTextStorage:textStorage];
14  
15 [textContainer addLinkWithLinkData:@"www.baidu.com" range:NSMakeRange(5, 8)];
16  
17 [textContainer addImageWithName:@"haha" range:NSMakeRange(2, 1)];
18  
19 UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"CYLoLi"]];
20 imageView.frame = CGRectMake(0, 0, CGRectGetWidth(label.frame), 180);
21 [textContainer addView:imageView range:NSMakeRange(16, 1)];
22  
23 // 生成 textContainer 文本容器
24 [textContainer createTextContainerWithTextWidth:CGRectGetWidth(self.view.frame)];
25  
26 TYAttributedLabel *label = [[TYAttributedLabel alloc]init];
27 label.textContainer = textContainer;
28  
29 // 也可以 生成NSAttributedString 属性文本
30 //NSAttributedString *attString = [textContainer createAttributedString];
31 //label.attributedText = attString;
32  
33 [label setFrameWithOrign:CGPointZero Width:CGRectGetWidth(self.view.frame)];
34 [self.view addSubView:label];</span>

TYAttributedLabel——简单,强大的iOS属性文本控件的更多相关文章

  1. WCF学习(二)对控件简单了解以及4个文本控件的简介

    WPF基础控件 系统默认提供的基础控件: 文本控件介绍与用法 Label控件 label控件:一般用户描述性文字显示. 在Label控件使用时,一般给予用户提示.用法上没有什么很特殊的,label控件 ...

  2. UILabel iOS添加文本控件

    UILabel这是iOS控制,这是UIView子类,只有在UIView文字显示功能的基础上加入.UILabel还查看课程和UIView类别似     //1.创建一个视图对象     //2.配置视图 ...

  3. Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件!

    源:Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件! 2014年02月06日发布控件的重要更新版本: Victor 串口控件 1.5.0.2 版本 (包 ...

  4. 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

    [源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...

  5. wxPython中按钮、文本控件的简单运用

    本节学习图形用户界面 ------------------------ 本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口.这里介绍wxPython : 下载地 ...

  6. 从0到1搭建移动App功能自动化测试平台(2):操作iOS应用的控件

    转自:http://debugtalk.com/post/build-app-automated-test-platform-from-0-to-1-Appium-interrogate-iOS-UI ...

  7. 重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBlock, RichTextBlockOverflow

    原文:重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBl ...

  8. 无比迅速敏捷地开发iOS超精美控件

    目录 前言 设计 编码 PaintCode 前言 自从人生第一篇博客<iOS中的预编译指令的初步探究>问世以来 浏览量竟然达到了360多,(路过的大神勿笑!)这些浏览量使我兴奋异常但又令我 ...

  9. iOS基础UI控件介绍-Swift版

    iOS基础UI控件总结 iOS基础控件包括以下几类: 1.继承自NSObject:(暂列为控件) UIColor //颜色 UIImage //图像 2.继承自UIView: 只能相应手势UIGest ...

随机推荐

  1. Android WiFi 日志记录(四次握手)

    记录一下四次握手的log. PMK: PMK(Pairwise Master Key,成对主密钥 STA和AP得到PMK后,将进行密匙派生以得到PTK.最后,PTK被设置到硬件中, 用于数据的加解密. ...

  2. android设置主mic/副mic录音

    //添加MIC设置参数 /hal/audio_extn/audio_extn.c @@ -75,6 +75,7 @@ struct audio_extn_module { bool ras_enabl ...

  3. python epoll

    需要用python实现中断的功能,所以用epoll监听gpio文件的变化.写个demo测试一下. 参考: http://www.cnblogs.com/coser/archive/2012/01/06 ...

  4. 省市区三级联动[JSON+Jquery]

    <!DOCTYPE html><head> <title>省市区三级联动[JSON+Jquery]</title> <script src=&qu ...

  5. JDBC查询数据实例

    在本教程将演示如何在JDBC应用程序中,查询数据库的一个表中数据记录. 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中数据库表中查询数据记录. 要执行以下示例, ...

  6. JDBC简单示例代码

    本文章教程中将演示如何创建一个简单的JDBC应用程序的示例. 这将显示如何打开数据库连接,执行SQL查询并显示结果. 这个示例代码中涉及所有步骤,一些步骤将在本教程的后续章节中进行说明. 创建JDBC ...

  7. Linq to Entity 动态拼接查询条件(重点是OR)

    public static class PredicateExtensions { /// <summary> /// 机关函数应用True时:单个AND有效,多个AND有效:单个OR无效 ...

  8. CI框架 -- 核心文件 之 Common.php

    system/core/Common.php 文件中可以定义 公共函数,我们可以在这里定义自己的公共函数.在任何情况下你都能够使用这些函数.使用他们不需要载入任何类库或辅助函数. 接下来分析下该文件中 ...

  9. Linux目录和文件管理

    今天我们来介绍一下对于Linux系统“命令“的理解和分类以及常用的目录文件管理命令的使用. 一. 命令 用于实现某一类功能的指令或程序,命令的执行依赖于解释器程序(例如:/bin/bash) 分类 内 ...

  10. thinkphp中的类库与引用import引入机制

    ThinkPHP的类库包括基类库和应用类库 控制器类 模块名+Action 例如 UserAction.InfoAction 模型类 模型名+Model 例如 UserModel.InfoModel ...