《電子技術應用》
您所在的位置:首頁 > 顯示光電 > 設計應用 > iPhone wap瀏覽器之界面架構篇
iPhone wap瀏覽器之界面架構篇
摘要: 本篇里筆者重點講述如果搭建一個可擴展的、健壯的界面架構。
Abstract:
Key words :

  在筆者的上篇文章《自己動手寫iPhone wap瀏覽器之BSD Socket引擎篇》中已經成功解析出來了wml頁面中的tag,如果讀者仔細的話可能會看到里面中文的tag顯示為亂碼,這是因為在iPhone上默認的中文編碼格式是UTF-8,而通過BSD Socket請求過來的是ASCII碼,所以需要通過轉換為UTF-8格式,如下:

  [[NSString alloc] initWithBytes:aChild-》Value() length:strlen(aChild-》Value()) encoding:NSUTF8StringEncoding]

  經過轉換編碼之后,在屏幕上顯示的打印內容如下:

  parse xml succeed

  aChild value = STATUS OK

  aChild value = card

  TiXmlNode::ELEMENT name = title, attr value = 百度一下,你就知道

  aChild value = p

  aChild value = img

  TiXmlNode::ELEMENT name = src, attr value = /r/wise/wapsearchindex/logoindexsmall.gif

  TiXmlNode::ELEMENT name = alt, attr value = 百度首頁

  aChild value = br

  aChild value = input

  TiXmlNode::ELEMENT name = name, attr value = word

  TiXmlNode::ELEMENT name = emptyok, attr value = true

  aChild value = br

  aChild value = anchor

  aChild value = 搜網頁

  TiXmlNode::TEXT Value = 搜網頁

  接下來的任務就是渲染這些解析出來的tag并顯示在界面上了,本篇里筆者重點講述如果搭建一個可擴展的、健壯的界面架構

  在所有平臺的界面架構中,筆者一直推崇MVC,MVC的著重點在于把界面顯示和數據處理分離開來以提供可擴展的界面架構平臺。基于這個思想,筆者建立了如下的架構圖:

  

  圖1.Tag界面架構圖

  在筆者的上篇文章《自己動手寫iPhone wap瀏覽器之BSD Socket引擎篇》中已經成功解析出來了wml頁面中的tag,如果讀者仔細的話可能會看到里面中文的tag顯示為亂碼,這是因為在iPhone上默認的中文編碼格式是UTF-8,而通過BSD Socket請求過來的是ASCII碼,所以需要通過轉換為UTF-8格式,如下:

  [[NSString alloc] initWithBytes:aChild-》Value() length:strlen(aChild-》Value()) encoding:NSUTF8StringEncoding]

  經過轉換編碼之后,在屏幕上顯示的打印內容如下:

  parse xml succeed

  aChild value = STATUS OK

  aChild value = card

  TiXmlNode::ELEMENT name = title, attr value = 百度一下,你就知道

  aChild value = p

  aChild value = img

  TiXmlNode::ELEMENT name = src, attr value = /r/wise/wapsearchindex/logoindexsmall.gif

  TiXmlNode::ELEMENT name = alt, attr value = 百度首頁

  aChild value = br

  aChild value = input

  TiXmlNode::ELEMENT name = name, attr value = word

  TiXmlNode::ELEMENT name = emptyok, attr value = true

  aChild value = br

  aChild value = anchor

  aChild value = 搜網頁

  TiXmlNode::TEXT Value = 搜網頁

  接下來的任務就是渲染這些解析出來的tag并顯示在界面上了,本篇里筆者重點講述如果搭建一個可擴展的、健壯的界面架構。

  在所有平臺的界面架構中,筆者一直推崇MVC,MVC的著重點在于把界面顯示和數據處理分離開來以提供可擴展的界面架構平臺。基于這個思想,筆者建立了如下的架構圖:

  

  圖1.Tag界面架構圖

  在Xml模塊處理完xml數據并提取出tag后,交給CXmlControl進行處理,CXmlControl在這里充當Control的角色,它負責在處理完tag(標簽)后生成相應的消息以顯示在界面上。

  其中CXmlControl繼承自UIView類,它負責顯示界面并響應用戶的按鍵消息,而具體的邏輯處理則是在CXmlControlImpl類中進行的,CXmlControlImpl這個類負責管理生成的tag(標簽)以及tag(標簽)的界面Layout(布局),如下:

  @class CXmlControlImpl;

  @interface CXmlControl : UIView {

  @public

  CXmlControlImpl* iImpl;

  }

  -(void) addElements:(CXmlElementImpl*)iElemntAdded;

  -(CXmlElement*) InsertContent:(CXmlElement*)aTarget aPosition:(NSInteger)aPosition aSource:(const NSString*)aSource aFlags:(NSInteger)aFlags;

  -(CXmlElement*) AppendContent:(const NSString*)aSource aFlags:(NSInteger)aFlags;

  -(void) Refresh;

  -(void) RefreshAndDraw;

  -(void) ClearContent;

  -(void) RemoveElement:(CXmlElement*)aElement;

  -(CXmlElement*) Element:(const NSString*)aId aIndex:(NSInteger)aIndex;

  -(CXmlElement*) ElementByTag:(const NSString*)aTagName aIndex:(NSInteger)aIndex;

  -(CXmlElement*) FocusedElement;

  -(void) SetFocusTo:(CXmlElement*)aElement;

  -(void) ScrollToView:(CXmlElement*)aElement;

  -(CXmlElement*) Body;

  -(void) SetEventObserver:(id《MXmlCtlEventObserver》)aObserver;

  -(CXmlElementImpl*) Impl;

  -(CGContextRef) SystemGc;

  -(void) Draw:(const CGRect)aRect;

  -(CWritableBitmap*) OffScreenBitmap;

  -(void) SetOffScreenBitmap:(CWritableBitmap*)aBitmap;

  -(void) DrawOffscreen;

  -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

  -(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

  -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

  @end

  Tag(標簽)類的基類為CXmlElement,它抽象了標簽的基本屬性和操作,在每一個派生自此基類的tag(標簽)類如CXmlTextElement、CXmlImgElement中都維護一個全局的布局類CHcMeasureStatus,每一個tag(標簽)類都負責自己的布局和自己的繪制操作,完成布局操作和繪制操作后為改變CHcMearuseStatus的狀態和屬性并傳遞給CXmlControl類。

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 久久久无码精品国产一区| 免费看片A级毛片免费看| 97色偷偷色噜噜狠狠爱网站97| 美女扒开尿口让男人桶进| 国内精品久久久久久久久| 亚洲人成网站999久久久综合| 精品国产黑色丝袜高跟鞋| 国产成人麻豆亚洲综合无码精品| 中文精品北条麻妃中文| 真实的国产乱xxxx在线| 国产在线播放免费| 91成人在线免费视频| 成人免费无码大片A毛片抽搐色欲| 亚洲精品无码专区在线在线播放 | 97日日碰人人模人人澡| 成年片人免费www| 亚洲精品乱码久久久久久蜜桃| 天天摸日日摸人人看| 好吊妞国产欧美日韩免费观看 | 亚洲日韩精品欧美一区二区 | 国产成人愉拍精品| 成年轻人网站色免费看| 亚洲一区二区三区在线网站| 狠狠色丁香九九婷婷综合五月| 国产在线精品一区二区中文| 2022国产麻豆剧果冻传媒影视| 天天躁夜夜躁狠狠躁2021a| 久久久xxxx| 曰本视频网络www色 | 亚洲精品无码乱码成人| 精品爆乳一区二区三区无码AV | 你懂的视频网站| 在线精品免费视频| 一区二区三区四区精品| 欧美专区日韩专区| 四虎永久在线精品免费影视| 94久久国产乱子伦精品免费| 日韩大片免费观看视频播放| 亚洲日韩区在线电影| 狠狠色狠狠色综合日日不卡| 又大又紧又粉嫩18p少妇|