2017-08-21 1 views
0

Ich möchte die Häufigkeit abrufen, mit der eine Zelle in einer Tabellenansicht angezeigt wurde, wenn sie vollständig in der Ansicht enthalten ist. Das sollte nur geschehen, wenn es vollständig in der Ansicht ist, kleinere Teile der oberen und unteren Zellen sollten nicht zählen.Die Häufigkeit, mit der eine Tabellenansichtszelle angezeigt wurde, und eine darauf basierende Funktion ausführen

Und nach einer gewissen Zeit (~ 3 Sekunden), sollte es eine Funktion von Print "Hallo" auslösen.

Ich habe versucht, einen Timer zu erstellen und in willDisplay Methode planen und in didEndDisplayingCell Methode ungültig machen. Es berücksichtigt irgendwie die Zellen, die nicht vollständig in der Ansicht sind.

Auch versucht tableView.visibleCells und iterierende Zellen in tableView.indexPathsForVisibleRows aber nichts half.

Jede Hilfe zu diesem würde sehr geschätzt werden. Prost!

Antwort

1

Während Sie verfolgen möchten, wie lange eine Zelle angezeigt wird (und wie oft sie angezeigt wurde), möchten Sie diese Zahlen nicht wirklich in Ihrer benutzerdefinierten (untergeordneten) UITableViewCell speichern, da diese Zellen sehr schnell recycelt und wiederverwendet werden, während sie auf dem Bildschirm gescrollt werden.

Was auch immer Ihr Datasource-Objekt ist, sollten Sie eine Eigenschaft (oder zwei), um es hinzuzufügen, um zu verfolgen, wenn das Objekt in einer Zelle angezeigt wird (dh ein „var displayCount : Int“ Eigentum?), Und Sie können ein Timer starten (oder NSTimer), um X Sekunden vor der Anzeige Ihrer "Hallo" -Nachricht zu zählen.

Sie können anhand der gefundenen Methoden in the answers to this related question feststellen, ob eine Zelle vollständig sichtbar ist. In diesem Fall können Sie Ihre Timer starten.

Um zu erkennen, wenn die Zelle außerhalb des Bildschirms gescrollt wird (so können Sie die Anzeigeanzahl erhöhen und/oder den Timer abbrechen), use the delegate method didEndDisplayingCell.

+0

Nun, das war genau das, was ich versucht habe. Beim Scrollen durch die Zeile wird der Zähler jedoch nicht aktualisiert, obwohl ich ihn explizit zurückgesetzt habe. Es behält nur den vorherigen Wert im Speicher und weist ihn den Gesamtansichten zu. –

Verwandte Themen