カスタムUITableViewCellのUIWebView
-
10-07-2019 - |
質問
私はこれが良いルートであるかどうかわかりません、...私はウェブから受け取ったいくつかのデータを持っています。問題は、テキストがhtml(pタグなど)であるということです。最初に考えたのは、セルにUiWebViewを作成し、loadHTMLStringを入力することでした。事実は、それは金田が動作します。しかし、私はその後、セルはもはやタッチの受信者ではありませんでした。
SO、コードに深く入り込む前に、UIWebViewを使用するよりも、セルにデータを取り込むより良い方法があります。それはハックのように感じられ、たとえそれが機能していても、アップルはそれを無効にするのではないかと恐れています。
//カスタムUITableViewCellクラスから:
- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
[self setFrame:frame];
webcell = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,frame.size.width-20,frame.size.height)];
[self.contentView addSubview:webcell];
//bloack the webview from touches
UIView *cover = [[UIView alloc] initWithFrame:webcell.frame];
[self.contentView addSubview:cover];
[cover release];
}
return self;
}
-(void)setLabelData:(FeedItem *)feedItem { link = feedItem.link;
NSMutableString *htmlstring = [NSMutableString string];
[htmlstring appendString:@"<html><head><link rel='stylesheet' href='style.css'/></head><body>"];
[htmlstring appendFormat:@"<p>%@</p>",feedItem.title];
[htmlstring appendFormat:@"<p>%@</p>",feedItem.description];
[htmlstring appendString:@"</body></html>"];
[webcell loadHTMLString:htmlstring baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle]bundlePath]]];
}
ありがとう
解決
誰かが反論しない限り、UITableViewCellのUIWebViewは良いアイデアではないと結論付けました。とはいえ、私はローカルのhtmlStringでテストしていません...
他のヒント
セルでWebビューを使用して、ある程度の成功を収めました。セルがタッチイベントを受信するようにするには、webviewの userInteractionEnabled
プロパティをNOに設定する必要があります。また、webviewはコンテンツのロードに時間がかかり、準備が整う前に再利用される可能性があるため、セルごとに異なるreloadIdentifierを使用する必要があります。
これは、テーブルに必要な数がわかったらすぐにwebview-cellsを静的に割り当て、画面外ですべての読み込みを開始することで行いました。再利用識別子はありません。セルとセルの行き先を追跡する必要があります。