iphone - 如何在表格单元格中使用 UIWebView?

标签 iphone cocoa-touch uitableview uiwebview

我正在构建一个包含一些 HTML 文本的表格,因此我使用 UIWebView 作为自定义表格单元格的 subview 。我已经遇到了一个问题 - 当我在表格中向下滚动时,UIWebViews 需要一秒钟才能更新。例如,我将查看第 1、2 和 3 行的单元格。我会向下滚动到第 8、9 和 10 行。有一会儿,在单元格 #8 中可见的 UIWebView 的内容是单元格 #1 中的内容,单元格 #9 中的内容是单元格 #2 中的内容,依此类推。

我了解到问题在于 UIWebViews 只是缓慢地渲染文本。建议尽快将内容预加载到 UIWebView 中,而不是等到表接收到 cellForRowAtIndexPath。所以现在,我有一个域对象,它之前只有 WebView 的文本内容 - 但现在它实际上具有对 UIWebView 本身的引用。

但是现在 UIWebView 中的一些内容呈现了,当我滚动表格时,UIWebView 仅显示为灰色框。如果我触摸灰色框,它实际上会收到触摸并更新 WebView - 例如,如果我触摸一个链接(我可能会或可能不会这样做,因为该框是灰色的,这将是运气好),将请求并正确显示链接到的页面。

- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
            // I suppose this isn't necessary since I am just getting it from the
            // Domain Object anyway
    content = [[UIWebView alloc] initWithFrame:CGRectZero];
    content.backgroundColor = [UIColor blackColor];
    [self addSubview:content];
    [content release];
}
return self;
}

// called by cellForRowAtIndexPath 
- (void)setMyDomainObject:(MyDomainObject*)anObject {
UIWebView *contentWebView = anObject.contentWebView;
int contentIndex = [self.subviews indexOfObject:content];
[self insertSubview:contentWebView atIndex:contentIndex];
}

最佳答案

解决这个问题的一种方法是使用多个 UILabel,每个标签都有不同的字体。然后有策略地将它们放置在单元格内,使它们看起来像连续的文本。我已经在 UITableView 中看到了这一点,并取得了非常好的结果。

另一个性能问题可能是您覆盖了 UItableViewCell 及其 init 方法。这几乎总是会导致 UITableView 性能不佳。相反,只需使用常规 UITableViewCell 实例并将 subview 添加到其 contentView 中。

Matt Gallagher 的 Easy Custom UITableView Drawing 对此进行了广泛的介绍。 。

描述的另一种方法是使用 Three20,它也可以为您提供样式文本。

您当前尝试的操作无法使用 UIWebview 完成。

预加载不会有帮助:当 UIWebviews 在屏幕外渲染时,这会减慢 UI 的速度;您应该始终在 iPhone 上练习延迟加载。

将 UIWebview 放入 UITableView 中可能会带来潜在的 Not Acceptable 性能影响。您将需要使用其他方法来实现您的目标。

不幸的是,NSAttributedString 在 UIKit 中不可用,这可以轻松解决您的问题。

关于iphone - 如何在表格单元格中使用 UIWebView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/646809/

相关文章:

objective-c - iPad - 同一屏幕中有多个 UITableView

iphone - 找到 Sprite 的旋转方向,即顺时针或逆时针

iphone - AudioUnitInitialize 在初始化 AudioComponentInstance 时抛出错误

objective-c - 用于向表中添加条目的标准 UI

objective-c - 如何制作一个小的透明模态整体来表示加载数据?

ios - 我如何在 iOS 7 中使用 Mandrill 向我的 Parse 支持的应用程序管理员发送一封简单的电子邮件?

ios - tableview 单元格中的 UIButton 更改文本

swift - Firebase ChildrenCount 计入 tableview 标签

ios - 设置 UILongPressGesture 的最大持续时间?

ios - 未找到框架 GoogleMapsBase