日本亚洲欧美日韩中文字幕_精品欧美一区二区三区久久久_久久av高潮av无码av_成在人线av无码免费_亚洲中文字幕无码久久精品1

400-850-8622

全國統(tǒng)一學(xué)習(xí)專線 8:30-21:00

[渝中區(qū)][Three20]TTStyledTextLabel實(shí)現(xiàn)原理淺出

授課機(jī)構(gòu):重慶漢昌軟件開發(fā)

地址:重慶市渝中區(qū)大禮堂北層二樓(重慶市人民政府對面)

網(wǎng)報價格:¥電詢

課程原價:¥電詢

咨詢熱線:400-850-8622

課程詳情 在線報名

TTStyledTextLabel

在TTCatalog這個Example中, 有一個TTStyleTextLabel如何使用的樣例,就從這個開始入手吧.
1) 創(chuàng)建一個TTStyledTextLabel對象,很簡單,把它加入到view中就可以顯示了

NSString* kText = @"
This is a test of styled labels.  Styled labels support 
<b>bold text</b>,.......";
TTStyledTextLabel* label1 = [[TTStyledTextLabel alloc] initWithFrame:self.view.bounds] autorelease];
  label1.font = [UIFont systemFontOfSize:17];
  label1.text = [TTStyledText textFromXHTML:kText lineBreaks:YES URLs:YES];

TTStyleTextLabel自身實(shí)現(xiàn)的功能主要就是監(jiān)聽touch事件,然后反饋給內(nèi)部的鏈接和其他可touch的節(jié)點(diǎn).


2) TTStyleTextLabel的神奇之處在于它包含的 text:TTStyleText
TTStyleText的兩個屬性是核心:
TTStyledNode*   _rootNode; // 實(shí)現(xiàn)了內(nèi)部樣式化文本塊的鏈表
TTStyledFrame*  _rootFrame; //存儲文本塊所占用的空間的鏈表

在把xhtml解析成多個node后, 使用TTStyledLayout對其計算空間,然后記錄在_rootFrame中

3) TTStyleText對于XHTML文本塊使用解析器: TTStyledTextParser:
  TTStyledTextParser* parser = [[TTStyledTextParser alloc] init] autorelease];
  parser.parseLineBreaks = lineBreaks;
  parser.parseURLs = URLs;
  [parser parseXHTML:source];

4) TTStyleTextParser處理<img><b><a>等tag,然后拆分成一塊塊簡單內(nèi)容(文本或者圖片),在_rootNode中串聯(lián)起來
處理xhtmltag的代碼在- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
    namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
    attributes:(NSDictionary *)attributeDict; 有興趣的童鞋可以去看看.


學(xué)習(xí)Three20和TTStyledTextLabel的初衷是建立一個類似facebook中消息列表中顯示的一個包含文字和圖片的消息.

可惜試了Three20的例子后發(fā)現(xiàn), 只能使用inline的方式排版,看來要實(shí)現(xiàn)更復(fù)雜的布局還是需要自己動手~
初步嘗試寫了一個只是支持多個樣式的UILabel, 還在琢磨在加入圖片后怎么布局. 這個功能就真有點(diǎn)像是一個mini瀏覽器了,就怪apple 的ios sdk的布局功能太弱了......
  • 報名課程:
  • 性別:
  • 姓名:
  • 手機(jī)號碼:
  • 其它說明:
姓名不能為空
手機(jī)號格式錯誤