0

私のテーブルビューはサーバーから読み込まれる画像で構成されているため、テーブルビューのスクロールが遅くなります。以下は私のコードです。任意のアイデア、私を助けてください。

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


    CustomTblViewCellFacetoface *cell = (CustomTblViewCellFacetoface *) [tableView dequeueReusableCellWithIdentifier:@"cellA"];
    if  (cell == nil)
    {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomTblViewCellFacetofaceNib" owner:Nil options:nil];

        for (id currentObject in topLevelObjects)
        {
            if  ([currentObject isKindOfClass:[UITableViewCell class]])
            {
                cell =  (CustomTblViewCellFacetoface *) currentObject;

                break;
            }
        }
    }
    // configure cell

    IStructFacetofaceRequests *objappointmentdetails  =   [M_ArrFacetofaceRequests objectAtIndex:indexPath.row];   
    cell.selectionStyle                         =   UITableViewCellSelectionStyleNone;
    cell.backgroundColor                        =   [UIColor clearColor];
    cell.m_CtrllblName.text                     =   objappointmentdetails.m_strUsername;
    cell.m_CtrllblVenue.text                     =   [NSString stringWithFormat:@"Venue : %@",objappointmentdetails.m_strVenue];
    cell.m_CtrllblDate.text                     =   [NSString stringWithFormat:@"%@ - %@",objappointmentdetails.m_strStartDate,objappointmentdetails.m_strEndDate];
    [cell.m_CtrllblName setTextColor:[UIColor colorWithRed:(113/255.f) green:(113/255.f) blue:(113/255.f) alpha:1.0f]];
    [cell.m_CtrllblVenue setTextColor:[UIColor colorWithRed:(113/255.f) green:(113/255.f) blue:(113/255.f) alpha:1.0f]];
    [cell.m_CtrllblDate setTextColor:[UIColor colorWithRed:(113/255.f) green:(113/255.f) blue:(113/255.f) alpha:1.0f]];
    cell.m_CtrllblName.font=[UIFont fontWithName:@"Arial-BoldMT" size:16];
    NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: objappointmentdetails.m_strImageurl]];

    cell.m_CtrlImgViewUser.image=[UIImage imageWithData: imageData];
    [cell.m_CtrlBtnView addTarget:self action:@selector(MoveToNextView:) forControlEvents:UIControlEventTouchUpInside];
    cell.m_CtrlBtnView.tag=indexPath.row;

    return cell;

}

これは、インデックス パスの cellfor 行で使用したコードです。

4

2 に答える 2

1

非同期読み込みを使用してこれを解決できます。このチュートリアルを実行してください。

http://www.markj.net/iphone-asynchronous-table-image/

于 2012-11-23T12:34:22.387 に答える
1

UITableView遅延読み込みを使用できます。

ここにリンゴ のサンプル

このプロジェクトはgithubで見ることができます

はい、UITableView遅延読み込みを想定して設計されています。を作成するUITableViewと、エントリはまったくロードされません。代わりに、システム フレームワークがcellForRowAtIndexPathメソッドを呼び出すのを待ちます。このメソッドは、ロードする必要があるすべてのセルに対して 1 回呼び出されます。これは、その時点で表示されているセルに対してのみ行われます。ユーザーがテーブル ビューをスクロールすると、新しいセルが表示され、表示される新しいセルごとに cellforRowAtIndexPath メソッドが再度呼び出されます。

これが一般原則です。ただし、セルにサーバーからのデータが入力されている場合は、いくつかの追加の考慮事項があります。cellForRowAtIndexPath可能な限り怠惰になるように構成し、表示されるすべてのセルに対してサーバーを呼び出すことができます。しかし、ネットワークの遅延により、ユーザー エクスペリエンスが非常に悪くなります。そのため、a 内のセル以外のデータ構造で、データに相当する多数のセルを事前にバッファリングしておくと有利UITableViewです。そうすれば、いつcellForRowAtIndexPathが呼び出されると、バッファリングされたデータからセルを構築することで、セルの内容をすばやく提供できます。バッファするデータの正確な量は、各データ要素の大きさと、アプリケーションがメモリ割り当てに関して他に何を行っているかによって異なります。率直に言って、アプリで 500 から 1000 セル分のデータをバッファリングすることに問題はないと思います。UITableView'sただし、データのバッファリングとセルのキューイングおよび再利用を混同しないでください。多数のセルをすぐに使用できる状態に維持する理由はありません。それらのセルに入るデータだけです。

于 2012-11-23T12:33:24.263 に答える