2017-08-21 10 views
0

テーブルビュー内のセルが完全にビューにあるときに表示された時間を取得したいとします。それは完全に視野に入っているときにのみ起こるはずです。上部と下部の細胞の小さな部分は数えてはいけません。テーブルビューセルが表示され、それに基づいて関数が実行された回数

一定の時間(〜3秒)が経過した後、印刷「hello」の機能を起動するはずです。

willDisplayメソッドでタイマーを作成してスケジューリングして、didEndDisplayingCellメソッドで無効にしました。何とか完全には見えない細胞を考慮に入れています。

tableView.visibleCellsと反復セルtableView.indexPathsForVisibleRowsでも試してみましたが、何も助けられませんでした。

これについてのヘルプは非常に高く評価されます。 乾杯!

答えて

1

セルが表示されている時間(および表示された回数)を把握したいときは、これらのセルをカスタム(サブクラス化された)UITableViewCellに保持する必要はありません。リサイクルされ、画面上でスクロールされるとすぐに再利用されます。

データソースオブジェクトが何であっても、オブジェクトをセルに表示するタイミングを追跡するためにプロパティ(または2つ)を追加する必要があります(つまり、プロパティ「var displayCount : Int?」)。TimerまたはNSTimer)は、「Hello」メッセージを表示する前にX秒をカウントします。

Timerを起動できるときに表示されるin the answers to this related questionの方法で、セルが完全に表示されているかどうかを検出できます。

セルがオフスクリーンでスクロールされたときを検出する(表示回数を増やす、またはタイマーを取り消すことができます)、use the delegate method didEndDisplayingCell

+0

まあ、それはまさに私が試みたものでした。しかし、行をスクロールすると、明示的にリセットしたにもかかわらず、カウンタがリフレッシュされません。以前の値をメモリに保持し、それを合計ビューに割り当てます。 –

関連する問題