TYAttributedLabel——簡單,強大的iOS屬性文本控制項

來源:互聯網
上載者:User

標籤:

本文轉載至 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中,針對各種文本和圖文的實現都有詳細的用例,每個標頭檔中都有詳細的用法注釋,這裡簡單的介紹下用法

UsageAPI 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屬性文本控制項

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.