mlyixi's Blog

欲望的唤醒,信仰的坚定
loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的用法总结
frame bounds理解

ios开发中显示网页元素的一些问题

mlyixi posted @ 2012年9月15日 20:16 in 未分类 with tags uitableview uitableviewcell uiwebview html ios , 3154 阅读

如果文本中有网页元素(如换行,特殊字符,图片链接等),在处理文本显示上就显得比较麻烦了,特别是要将这些文本放在uitableviewcell中时,涉及cell重用,也许只有采用三方提供的uilabel才可能同时在cell重用的同时显示网页元素. 利用uiwebview和uitextview都不太能将把两者解决好.

方案:

1. uiwebview. 利用uiwebview显示网页元素比较简单,只要解析文本就好了. 尝试用了这里提供的解码库,采用的是GTM.注意解码的层次,uiwebview能够解析一层而已.如&amp;&lt;br&gt;需要解析2次才成转成<br>然后在uiwebview中显示换行. 如果只解析一次,在uiwebview中就只显示<br>了. 

2. uitextview. 利用未公开的实例方法setcontexttohtmlstring可以实现webview的功能,但是据说苹果不允许这样做.同时试了下在uitableview中显示简单的网页元素,结果打开到显示出来延时半秒到1秒左右,影响效率.

3. 三方库,如three20的styledtextlabel. 没试,主要是three20各组件都集成在一起. 把整个three20都加入现有的程序中觉得不太好.有空试着学着用.

 

uiwebview与uitableview

将uiwebview加入到uitableviewcell中在uitableview中显示的时候有如下几个问题:

1. tablecell的高度问题. 

因为uitableview的delegate中高度的决定是在cell加载之前,而webview的最佳尺寸得当webview加载完后(其delegate的uiwebviewdidfinishload方法中,两种方法sizethatfits和javascript)才能得到,所以这里就有一个矛盾. 尝试了下通过自定义delegate将webview加载完后得到的最佳尺寸传递到uitableview中然后table重新加载(示例代码),结果导致了无限循环(原因见这里).

另一种方法是根据文本猜测uiwebview的高度, = =.由于uiwebview的字体和大小都不一样,所以要文本字体及大小的设置都要自己决定. 据说苹果也是这么做的,将cell的高度预先定义到一个表中然后使用.

2. tableviewcell的重用问题.

当高度的问题解决后,接着是cell重用.如果tablecell只是显示信息,而没有didselectedcellAtRowIndexPath然后pushviewcontroller的话,就应该没有重用问题.但是如果选择并进入下一个视图控制器,返回后再滚动table,重用问题就显示出来了----选择的那个cell的frame加载了多次文本. 可能是由于下一视图控制器retain了该cell中的对象,原因不明.

所以只好舍弃tabelcell重用,直接cell=[tablaeviewcell alloc] init],一切就正常了.

 

 

 

Avatar_small
seo service UK 说:
2024年1月15日 21:59

wow this saintly however ,I love your enter plus nice pics might be part personss negative love being defrent mind total poeple


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter