HTML のテキストを含むテーブルを作成しているので、カスタム テーブル セルのサブビューとして UIWebView を使用しています。私はすでに 1 つの問題に遭遇しました。テーブルを下にスクロールすると、UIWebViews の更新に 1 秒かかります。たとえば、1、2、3 番目の行のセルを表示しているとします。下にスクロールして、8、9、10 と表示します。しばらくの間、セル #8 に表示されていた UIWebView のコンテンツは次のようになりました。セル #1 の内容、セル #9 の内容はセル #2 の内容、というように続きます。
問題は、UIWebViews が単にテキストをゆっくりとレンダリングすることであることがわかりました。テーブルがcellForRowAtIndexPathを受け取るまで待つのではなく、できるだけ早くコンテンツをUIWebViewにプリロードすることをお勧めします。これで、以前は 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];
}