自己动手写iPhone wap浏览器之界面架构篇
自己动手写iPhone wap浏览器之界面架构篇(手把手教你iphone开发 – 进阶篇)
作者:孙东风 2009-12-28(转载请注明出处)
在笔者的上篇文章《自己动手写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
相关文档:
由于WAP信道带宽的限制,我们在编写WAP应用的时候都希望最大限度地减少消息的传送量。要做到这一点,就要尽量地使用缓存,经常地从缓存中获得以前的消息。幸运的是目前大多数WAP设备都有一定级别的缓存,在默认情况下,会尝试最大化的缓存。几乎所有指向URL的响应都会被缓存下来。
......
收到反馈。我马上去看了下~~ 的确是 403 为啥呢? 代码确定没动过。。
目前主要WAP上网是两种网络
CMNET CMWAP
经过测试发现 CMWAP 就显示 403 而 CMNET 就很正常~~
顶。原来是网络问题~~ ......
<form action="" method="post">
<table border="1">
<tr>
<td width="40">用户名</td>
<td> <input name="username" size="5" maxlength="8" /> </td>
</tr>
<tr>
<td width="40">密码</td&g ......
<table>
<tr>
<td> <input name="uname"/> </td>
</tr>
</table>
在手机浏览器中将 忽略 input 元素
如果要想使 input 在浏览器中成功显示
需将其 放在 form 下
即:
<form>
<table>
<tr>
<td> <input name="uname"/> &l ......
对于WAP网站来说我们知道手机的机型适配变得异常重要。在讨论UA前我们看下典型的几个UA的例子:
1)SCH-M609/1.0 POLARIS/5.30.WAP CTC/1.0
2)Mozilla/5.0 (LG-KV755/CH755V05;U;REX/1.0;BREW/3.1.5;240*320;CTC/1.0) Polaris/6.15
3)K-Touch/Windows CE 5.2,Pocket PC Profile/MIDP-2.0& ......