ユーザーが UITableView の一番下までスクロールしたときに Web リクエストをトリガーします
-
18-09-2019 - |
質問
ユーザーが UITableView の一番下までスクロールしたときに UIActivityIndicatorView を「表示してアニメーション化」するようにしようとしています…。
テーブル ビューの一番下に到達すると、完了までに数秒かかる Web リクエストが作成され、その後 UIActivityIndicatorView が「停止して非表示」になります。
tableView:willDisplayCell:forRowAtIndexPath を使用して、UIActivityIndicatorView の表示をトリガーしています。
リスト項目
しかし問題は、UIActivityIndicatorView がメソッド全体 (つまり、tableView:willDisplayCell:forRowAtIndexPath:) が呼び出されるまで iPhone 画面に表示されず、その時点ですでに非表示になっていることです。
次の方法に関するアイデアがあれば:
- インジケータービューを表示する
- Webリクエストを行う
- インジケータービューを非表示にしますか?
新しいスレッド?もっといい方法?
ありがとう!!
具体的には、私の関数は次のようになります
- (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];
}
}
}
解決
わかった。上記のコード スニペットから、いくつかの問題がわかります。
- セルを表示する前に、リクエストが完了するのを待つことを計画しているようです。これにはいくつかのマイナス点があります。これはユーザーにとって煩わしいものであり、リクエストの送信中 (数秒かかる場合があります) に UI がフリーズする可能性が高くなります。
- すべては内部で起こります
willDisplayCell
方法。
この問題を解決する方法は次のとおりです。
- セルトリガーの読み込みを表示します 非同期的に.
- 「読み込み中...」と表示されたセルをスピナーで表示します (インスピレーションについては Tweetie 2 を参照)
- リクエストからのコールバックを待ちます
- モデルに応答を入力します
- 「読み込み中...」セルを削除します。
- データを強制的にリロードする
[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のの方法