2012-04-03 13 views
0

私は、動的コンテンツ(Webから)をUITableViewに読み込み、セルの高さを先に計算するという問題について、たくさんのビットとピースを読みました。私は別の簡単な実装を試しましたが、問題は続きます...動的コンテンツをiOSのUITableViewに読み込むための適切なアプローチ

ウェブからJSONファイルを読み込み、可変サイズの画像とさまざまなテキストラベルを持つ 'item'オブジェクトに解析すると仮定すると、ここJSONファイルを読み込んで、項目の配列

  • に解析

    1. アプリの負荷にアイテムのほんの一部を提供します。私はすべてがをロードしている間、長いアプリの時間をハングアップを避けるために正しいアプローチだろうと考えているものです私は各項目に関連付けられた画像をロードしてセルの高さを計算する必要があるため、テーブルビュー(約10項目)に配列します。すべての画像がロードされるまでビューが全アイテムリストを通過するようにしたい - これは、すべての画像がロードされるまでアプリをハングアップさせる。
    2. 利用可能なセルでtableviewを表示する。グランドセントラル派遣を使用してバックグラウンドで複数の項目)
    3. は、残りの項目のすべて/一部の画像をダウンロードし、新しいデータ(項目リストが非常に長い場合には、ステップ4を繰り返します)

    ステップとテーブルビューをリロード私は最初に画像を読み込まずにセルの高さを計算する方法がないので、tableviewは最初にすべてのセルの高さを計算するので、すべての画像のすべての画像をダウンロードするのに非常に時間がかかるs。

    これは適切なアプローチですか?私は何かを欠いている?

  • 答えて

    2

    なぜあなたはテーブルビューで画像サイズを標準化しないのですか?次に、サイズに合わせて画像を表示しながら操作することができます。選択した場合、画像を表示する方法を提供します。 Quartzcoreフレームワークを使用すると、元の画像を取り込んでサイズを変更できます。

    これは、テーブルビューをランダムなものよりも均一な画像サイズで魅力的に見せるためです。

    +0

    合意。 Flickrアプローチを採用して、均一な正方形のサイズに切り取ります。 –

    0

    データがまだ読み込まれている間でも、ショーを続ける必要があります。そのため、正しいイメージが得られる前に魅力的に見えるセルをデザインしたいと思うでしょう。一般的なアプローチは、デフォルトのイメージを出荷し、セルが良好に見えるようにフォーマットすることです。

    高さを処理するために、tableViewデータソースプロトコルは、セルの高さをどのように高くするかを尋ねることができます。答える方法は疑似コードです:

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    
        id myModelElement = [self.myModel objectAtIndex:indexPath.row]; 
        UIImage *image = myModelElement.image; 
        if (!image) image = self.placeholderImage; 
    
        return kFIXED_HEIGHT + image.size.height; 
    } 
    

    また、イメージを非同期にロードすることもできます。 See my answer hereは非常に簡単なアプローチです。 GCDはありません。テーブル行のリロードさえありません。

    +0

    Danh、高さでセルの高さを計算すると...次に、最初にすべてのイメージをロードする必要があります...それは避けようとしているのです –

    +0

    イメージはまだロードされていないかもしれませんが、これは、プレースホルダ(実際のものが到着するまでかなり見える、あなたのアプリケーションバンドルに出荷されるイメージ)を提案する理由です。 – danh

    関連する問題