2009-08-19 16 views
0

Ich lade ungefähr 60 bis 80 Daten von Web-Service.Tabellenansicht - Anzeige wie - # Around Me - Google # - in iPhone

Aber Wenn Sie gesehen haben „Around Me - Google - Anwendung“ -> Es hat eine Tableview als Suchergebnis -> In der Tabelle Letzte Zelle als Ansicht Mehr geschrieben -> Ein Klick, dass mehr Daten angezeigt

Ich möchte den gleichen Effekt/Logik zu meiner Anwendung implementieren, aber weiß nicht wie?

Würden Sie plz mir helfen?

Antwort

2

Aviad Ben Dov und rkbang bieten einige nützliche Tipps. Hinzufügen zu diesem:

Um auf eine Berührung auf Ihrer "Mehr anzeigen" Zelle reagieren, schreiben Sie eine tableView:willSelectRowAtIndexPath: Methode (aus dem UITableViewDelegate Protokoll) in welches Objekt ist der Delegat für Ihre UITableView. Bei diesem Verfahren wird einen Anruf mehr Daten zu laden, und das Rück nil so wird die Zeile nicht ausgewählt bleiben (was mehr knopfartige Verhalten ist):

- (NSIndexPath *)tableView:(UITableView *)tableView 
    willSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [self loadMoreData]; 
    return nil; // Don't leave this row selected. 
} 

in Ihrer Ladefunktion, einen Server Anruf zu erhalten die Daten, analysieren Sie es und laden Sie die Tabelle neu. Es ist auch höflich ein Besetztanzeige zu geben, während Sie für die Server-Antwort darauf warten:

#import "HTTPHelper.h" 

// ... later ... 

- (void) loadMoreData { 
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 
    NSString* dataStr = nil; 
    NSError* error = [[HTTPHelper sharedInstance] 
        synchronousGetURLAsString:@"http://server.com/mystuff" 
        replyData:&dataStr]; 
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; 
    if (error) { 
    [self displayErrorMessage:error]; 
    } else { 
    [self parseIntoDataSource:dataStr]; 
    [tableView reloadData]; 
    } 
} 

In dieser letzten Funktion, ich bin parseIntoDataSource das Verfahren unter der Annahme wird der Server die Antwort analysieren und diese Daten unabhängig von Ihrer Klasse hinzufügen verwendet, um die Daten für Tabellenzellen bereitzustellen, die durch die tableView:cellForRowAtIndexPath:-Methode (des Protokolls UITableViewDataSource) angegeben werden. Dieser Code verwendet auch HTTPHelper aus the moriarty library.

Wenn Sie XML analysieren möchten, können Sie die SDK-eigene NSXMLParser verwenden. The TouchXML library ist ebenfalls verfügbar und bietet eine etwas robustere Unterstützung für leicht verschmutzte Daten (wie in der realen Welt HTML, die normalerweise nicht den XML-Standards entspricht).Um JSON zu parsen, könnten Sie the json-framework verwenden, das eine sehr einfache kategoriebasierte Schnittstelle hat.

+0

Gibt es einen guten Grund, tableView zu verwenden: willSelectRowAtIndexPath: vs tableView: didSelectRowAtIndexPath :? –

1

Zuerst müssen Sie Paging in Ihrer Anwendung tun. Das bedeutet, dass Ihr Webdienst nicht alle Elemente zurückgibt, sondern nur einige davon zurückgibt, indem Sie einen Parameter offset hinzufügen, der angibt, wo Sie beginnen sollen, Ergebnisse zu erhalten, und length, also wie viele Ergebnisse erhalten werden. Das heißt, der erste Anruf wäre mit 0, 20, der zweite mit 20, 20, der dritte mit 40, 20 etc, wenn Sie 20 Artikel pro "Seite" wünschen.

Dann fügen Sie Ihrer Tabellenansicht ein anklickbares Element hinzu. Dies kann ein spezieller Abschnitt sein, der von Ihrem Delegaten zurückgegeben wird und eine einzelne Zeile enthält, die beim Klicken den Webdienst für die nächste Seite aufruft und das Ergebnis der Tabellenansicht hinzufügt, indem das Back-End-Array aktualisiert und die Zeileneinfügungsnachrichten verwendet werden.

1

Sie können Ihre Tabellenansicht jederzeit anpassen. Zum Beispiel, lassen Sie uns sagen, dass Sie nur 25 Elemente anzeigen möchten. Stellen Sie dann in der Funktion numberOfRowsInSection 26 zurück und überprüfen Sie in cellForRowAtrIndexPath die letzte Zeile. Wenn es sich um die letzte Zeile handelt, lautet der Text "Mehr anzeigen".

Ähnlich wie in selectedRowAtIndexPath können Sie die Anzahl der Zeilen überprüfen und wenn es die letzte ist, weitere 25 laden. Behalten Sie einen ganzzahligen Index, der 1 für die ersten 25 und 2 für die nächsten 25 ist. Auf diese Weise müssen Sie die Daten nicht erneut abrufen und wieder, während Sie die Daten in einem NSMutableArray speichern können.

Verwandte Themen