2009-08-19 4 views
0

Je charge environ 60 à 80 de données de service Web.Table View - Afficher comme - # Autour de moi - Google # - dans iPhone

Mais si vous avez vu « Around Me - Google - Application » -> Il a une tableView comme résultat de la recherche -> Dans le tableau Voir la dernière cellule est écrit vue Plus -> En cliquant que plus de données apparaît

Je veux appliquer le même effet/logique à mon application mais je ne sais pas comment?

Pourriez-vous m'aider?

Répondre

2

Ajoutez à cela:

Pour répondre à une touche de votre cellule "View More", écrivez une méthode tableView:willSelectRowAtIndexPath: (à partir du protocole UITableViewDelegate) dans l'objet qui est le délégué pour votre UITableView. Dans cette méthode, faire un appel pour charger plus de données, et le retour nil de sorte que la ligne ne reste pas sélectionnée (ce qui est plus de type bouton comportement):

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

Dans votre fonction de charge, faire un appel de serveur pour obtenir les données, l'analyser et recharger la table. Il est aussi poli de donner un indicateur occupé pendant que vous attendez la réponse du serveur:

#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]; 
    } 
} 

Dans cette dernière fonction, je suppose que la méthode parseIntoDataSource analysera la réponse du serveur et ajouter que les données à tout ce que votre classe utilise pour fournir les données pour les cellules de table qui sont données par la méthode tableView:cellForRowAtIndexPath: (du protocole UITableViewDataSource). Ce code utilise également HTTPHelper de the moriarty library.

Si vous souhaitez analyser XML, vous pouvez utiliser le NSXMLParser du SDK. The TouchXML library est également disponible, et offre un support un peu plus robuste pour les données légèrement sales (comme le monde réel html, qui n'est généralement pas conforme aux normes XML).Pour analyser JSON, vous pouvez utiliser the json-framework, qui a une interface basée sur une catégorie très simple.

+0

Existe-t-il une bonne raison d'utiliser tableView: willSelectRowAtIndexPath: vs tableView: didSelectRowAtIndexPath :? –

1

Vous devez d'abord effectuer une recherche dans votre application. Cela signifie qu'au lieu de renvoyer tous les éléments par votre service Web, il doit renvoyer uniquement certains d'entre eux en ajoutant un paramètre de offset, indiquant où commencer à obtenir des résultats, et length, ce qui signifie le nombre de résultats à obtenir. Cela signifie que le premier appel serait avec 0, 20, le second avec 20, 20, le troisième avec 40, 20 etc si vous voulez 20 éléments par "page".

Ensuite, vous ajoutez un élément cliquable à votre vue de table. Il peut s'agir d'une section spéciale renvoyée par votre délégué, contenant une seule ligne qui, lorsqu'elle est cliquée, appelle le service Web pour la page suivante et ajoute le résultat à la vue tabulaire en mettant à jour le tableau backend et en utilisant les messages d'insertion.

1

Vous pouvez toujours personnaliser votre tableview. Par exemple, disons que vous voulez montrer seulement 25 articles. Ensuite, dans la fonction numberOfRowsInSection, renvoyez 26 et, dans cellForRowAtrIndexPath, vérifiez la dernière ligne. Si c'est la dernière rangée, alors son texte sera "Voir plus". De même, dans selectedRowAtIndexPath, vous pouvez vérifier le nombre de lignes et s'il s'agit du dernier chargement. Gardez un index entier qui sera 1 pour les 25 premiers et 2 pour le 25. Vous n'aurez plus à récupérer les données et encore, alors que vous pouvez stocker les données dans un NSMutableArray. Aviad Ben Dov et rkbang offrent quelques conseils utiles.

Questions connexes