ユーザーが UITableView の一番下までスクロールしたときに Web リクエストをトリガーします

StackOverflow https://stackoverflow.com/questions/1869099

質問

ユーザーが UITableView の一番下までスクロールしたときに UIActivityIndi​​catorView を「表示してアニメーション化」するようにしようとしています…。

テーブル ビューの一番下に到達すると、完了までに数秒かかる Web リクエストが作成され、その後 UIActivityIndi​​catorView が「停止して非表示」になります。

tableView:willDisplayCell:forRowAtIndexPath を使用して、UIActivityIndi​​catorView の表示をトリガーしています。

リスト項目

しかし問題は、UIActivityIndi​​catorView がメソッド全体 (つまり、tableView:willDisplayCell:forRowAtIndexPath:) が呼び出されるまで iPhone 画面に表示されず、その時点ですでに非表示になっていることです。

次の方法に関するアイデアがあれば:

  1. インジケータービューを表示する
  2. Webリクエストを行う
  3. インジケータービューを非表示にしますか?

新しいスレッド?もっといい方法?

ありがとう!!

具体的には、私の関数は次のようになります

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.results && indexPath.row == [self.results count] - 1) {
        [self.loadingSignal setHidden:NO]; // <====== my UIActivityIndicatorView is called "loadingSignal"
        [self.loadingSignal startAnimating];

    /// make web request that will take a few seconds

        [self.loadingSignal setHidden:YES];
        [self.loadingSignal stopAnimating];

        }
    }
}
役に立ちましたか?

解決

わかった。上記のコード スニペットから、いくつかの問題がわかります。

  1. セルを表示する前に、リクエストが完了するのを待つことを計画しているようです。これにはいくつかのマイナス点があります。これはユーザーにとって煩わしいものであり、リクエストの送信中 (数秒かかる場合があります) に UI がフリーズする可能性が高くなります。
  2. すべては内部で起こります willDisplayCell 方法。

この問題を解決する方法は次のとおりです。

  1. セルトリガーの読み込みを表示します 非同期的に.
  2. 「読み込み中...」と表示されたセルをスピナーで表示します (インスピレーションについては Tweetie 2 を参照)
  3. リクエストからのコールバックを待ちます
  4. モデルに応答を入力します
  5. 「読み込み中...」セルを削除します。
  6. データを強制的にリロードする [tableView reloadData]

これにより、やりたいことが達成できるはずです。

他のヒント

あなたは<のhref = "http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableView_Class/Reference/Reference.html#//apple_ref/occ/instmにそうしてみてください/のUITableView / cellForRowAtIndexPath:」REL = "nofollowをnoreferrer"> cellForRowAtIndexPath:のUITableViewのの方法

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top