Frage

Ich versuche, eine UIActivityIndicatorView zu bekommen, um „zu erscheinen und animieren“, wenn ein Benutzer einen Bildlauf auf dem Boden eines UITableView ....

Auf den Boden der Tabellenansicht zu erreichen, eine Web-Anforderung erfolgt, dass ein paar Sekunden dauert die UIActivityIndicatorView sollte „aufhören und verstecken“

abzuschließen und dann

Ich bin Auslösung der Erscheinung des UIActivityIndicatorView mit Tableview: willDisplayCell: forRowAtIndexPath:

Liste item

Aber das Problem ist, dass der UIActivityIndicatorView nicht auf dem iPhone-Bildschirm erscheint erst nach dem gesamten Verfahren (dh Tableview: willDisplayCell: forRowAtIndexPath :) genannt wird, und dann ist es auch schon versteckt.

Alle Ideen, wie man:

  1. zeigt die Anzeige Ansicht
  2. machen die Web-Anfrage
  3. Ausblenden der Anzeige Ansicht?

neuer Thread? besserer Weg?

Danke !!

gesagt, meine Funktion wie folgt aussieht

- (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];

        }
    }
}
War es hilfreich?

Lösung

Okay. Von Ihrem obigen Code-Snippet, sehe ich ein paar Probleme:

  1. Sie scheinen auf der Warteliste für die Anforderung vor der Anzeige um eine Zelle zu beenden zu planen. Dies hat einige negative Punkte, um es:. Es dem Benutzer ärgerlich und wird höchstwahrscheinlich die Benutzeroberfläche einfrieren, während die Anforderung geht (was einige Sekunden dauern kann)
  2. Alles geschieht innerhalb der willDisplayCell Methode.

Hier ist, wie ich denke, Sie dieses Problem lösen soll:

  1. Haben Sie wird angezeigt Triggerzelle geladen asynchron .
  2. eine Zelle anzeigen, die "Loading ..." mit dem Spinner auf ihm sagt (siehe Tweetie 2 für Inspiration)
  3. Warten Sie auf den Rückruf von Ihrer Anfrage
  4. Füllen Sie Ihr Modell mit der Antwort
  5. Entfernen Sie die "Loading ..." Zelle
  6. erzwingen Nachladen von Daten [tableView reloadData]

Dies sollte Ihnen ermöglichen, zu erreichen, was Sie tun möchten.

Andere Tipps

Sie können versuchen, so in der cellForRowAtIndexPath: Methode des UITableView

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top