2017-07-21 11 views
1

UIWebViewをUITableViewCellに埋め込みたいです。この方法でUITableViewCellにUIwebViewを埋め込む

1、私はセットアップセルのデータベース::

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

    UITableViewCell * cell = [tableView 
    dequeueReusableCellWithIdentifier:cellIdenWebViewIntro 
    forIndexPath:indexPath]; 

    PlayListModel * model = [PlayListModel new]; 
    cell.model = model; 
    return cell; 

    } 

をセル内に、私のセットアップのWebViewとsetModel方法でURLリクエストを送信します。

- (void)setModel:(PlayListModel *)model{ 
    _model = model; 

    NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://temp url"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10]; 

    [self.webView loadRequest:request]; 
} 
しかし、いくつかの問題があります

これは、セルを設定するのに非常に普通の方法です。しかし、tableViewがスクロールダウンしてWebViewCellにスクロールすると、システムは(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPathと呼ばれ、WebViewは何度もURLリクエストを送信します。 WebViewのHTMLコンテンツをキャッシュする方法があります。ユーザーが現在のビューコントローラをポップアウトしなかった場合は、HTMLをWebViewに再利用しますが、リクエストを複数回送信する必要はありません。

p.s NSURLRequestの作成時に既にキャッシュポリシーを設定しましたが、機能しませんでした。

答えて

0

はい、期待しています。 TableViewは、スクロール時にcellForRowAtIndexPathメソッドを呼び出します。

コンテンツをダウンロードしてURLというコンテンツをダウンロードして保存することができます。したがって、セルがリロードされたときに、のコンテンツがある場合は、URLの内容が格納されている変数またはデータベースからロードされていることを確認できます。

ファイルをダウンロードするには、hereをチェックしてください。

+0

正確には、HTMLコンテンツをダウンロードする方法はありますか? – Neko

+0

@Nekoはい、更新された回答を確認してください。 –

0

JavaScriptを使用してHTMLコンテンツをダウンロードする別の方法があります。

// DidFinishLoad 
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation 
{ 
    NSString *getHTMLJSCode = @"document.getElementsByTagName('html')[0].innerHTML"; 
    [wkWebView evaluateJavaScript:getHTMLJSCode completionHandler:^(id _Nullable content, NSError * _Nullable error) 
    { 
     if (error) { 
      NSLog(@"Error: %@",error); 
      return; 
     } 

     NSLog(@"Content: %@",content); 
     self.HTMLSourceCode = content; // cache 
    }]; 
} 

最初の読み込み時にリクエストを読み込んでからキャッシュすることができます。

if (HTMLSourceCode) { 
    // To load cached webpage. 
    [wkWebView loadHTMLString:HTMLSourceCode baseURL:[NSURL URLWithString:_urlString]]; 
} 
else { 
    //... 
    [wkWebView loadWithURLRequest:request] 
} 
関連する問題