Comment modifier la taille d'une cellule TableView en fonction de son contenu?

Nooka10Nooka10 Membre
mai 2014 modifié dans Vos applications #1

Bonsoir,


 


Etant un fan totalement addict de Tango Argentin, j'essaie de créer une application qui liste les soirées qui ont lieu dans ma région, à  la manière de l'app Hoy Milonga, disponible sur l'appStore, qui fait la même chose pour la ville de Buenos Aires.


 


Mon application est basée sur des TablesView listant les évènements dans différents onglets (un onglets pour les practica (soirée entrainement), les soirées etx et un autre pour les event exceptionnels, style un week-end de stage etc...).


 


J'ai commencé par faire le squelette de l'application via le storyboard. Ensuite, j'ai créé la base de donnée. Dans un premier temps, je suis passé par les commandes SQL, puis finalement, j'ai opté pour Core Data.


 


J'ai créé un onglet (provisoire) qui me permet d'entrer directement de nouveaux évènements dans la BDD depuis l'application.


 


J'ai "découpé" chaque évènement entrés dans ma base de donnée en une multitude de colonnes (une pour le nom, une pour l'heure de début, de fin, pour l'adresse etcetcetc.... Une 30aine de colonne au total! ^^).


Tous les évènements apparaissent dans un Table View et lorsque j'en sélectionne un, on obtiens plus de détails sur cet évènement précis.


 


Réponses

  • Bonjour bonjour,


     


    je n'ai malheureusement pas eu de réponse, mais j'ai continué à  chercher une solution de mon côté, et finalement, en bidouillant un peu, jai réussi.


     


    Je vous met le code que j'ai utilisé pour si jamais, un jour, quelqu'un se pose la même question que moi...


     


    N'hésitez pas à  me dire si je me suis compliqué la vie (ce qui d'ailleurs ne m'étonnerait pas du tout ! ^^)



    // affiche un seul marker, celui de l'évènement qui était affiché dans le MilongaHebdDetailVC!
    - (void) fetchMarkerMapsMilonga
    {
    if (self.tangoaddicts.nomMilonga != nil)
    {
    GMSMarker *mkr = [[GMSMarker alloc] init];
    NSString *lat = self.tangoaddicts.latitude;
    NSString *lng = self.tangoaddicts.longitude;
    NSString *T = self.tangoaddicts.nomMilonga;

    NSString *ad = self.tangoaddicts.adresse;
    NSString *hd = self.tangoaddicts.heureDebut;
    NSString *hf = self.tangoaddicts.heureFin;

    NSString *S = [NSString stringWithFormat:@%@ \nDe %@ à  %@", ad, hd, hf];

    NSLog(@%@", T);


    [mkr setPosition:CLLocationCoordinate2DMake([lat doubleValue], [lng doubleValue])];
    [mkr setTitle:T];
    [mkr setSnippet:S];
    [mkr setMap:mapView_];
    }

    // affiche un marker pour chaque évènement présent dans la base de donnée, en utilisant les données Latitude et Longitude de l'évènement à  condition que self.tangoaddicts.nomMilonga soit égal à  nil (rien)
    else if (self.tangoaddicts.nomMilonga == nil)
    {
    AppDelegate *appDelegate =
    [[UIApplication sharedApplication] delegate];

    NSManagedObjectContext *context =
    [appDelegate managedObjectContext];

    NSEntityDescription *entityDesc =
    [NSEntityDescription entityForName:@TangoAddicts
    inManagedObjectContext:context];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entityDesc];

    self.tangoaddicts = [[context executeFetchRequest:request error:nil] mutableCopy];


    NSMutableArray *title = [self.tangoaddicts valueForKey:@nomMilonga];


    NSMutableArray *adresse = [self.tangoaddicts valueForKey:@adresse];
    NSMutableArray *heureDebut = [self.tangoaddicts valueForKey:@heureDebut];
    NSMutableArray *heureFin = [self.tangoaddicts valueForKey:@heureFin];

    NSMutableArray *latitude = [self.tangoaddicts valueForKey:@latitude];
    NSMutableArray *longitude = [self.tangoaddicts valueForKey:@longitude];

    for (int i = 0; i < [title count]; i++)
    {
    GMSMarker *mkr = [[GMSMarker alloc] init];
    double lat = [[latitude objectAtIndex:i] doubleValue];
    double lng = [[longitude objectAtIndex:i] doubleValue];
    NSString *T = [title objectAtIndex:i];

    NSString *ad = [adresse objectAtIndex:i];
    NSString *hd = [heureDebut objectAtIndex:i];
    NSString *hf = [heureFin objectAtIndex:i];

    NSString *S = [NSString stringWithFormat:@%@ \nDe %@ à  %@", ad, hd, hf];


    [mkr setPosition:CLLocationCoordinate2DMake(lat, lng)];
    [mkr setTitle:T];
    [mkr setSnippet:S];
    [mkr setMap:mapView_];
    }
    }

    }


    J'ai placé cette méthode dans le controller de ma maps, et j'appelle la méthode directement depuis le viewdidload à  l'aide de ceci:



    [self fetchMarkerMapsMilonga];

    Voilà , mon problème est donc réglé.


    Mais comme toujours, je ne compte pas m'arrêter là , et je me pose d'autres questions...


     


    Mon nouveau défi, c'est de trouver une façon de modifier la taille d'une cellule d'un TableView en fonction de la taille des UILabels qu'elle contient.


     


    En effet, il peut arriver que tout les champs de ma vue MilongaHebdDetailViewController (regardez l'image de mon 1er post) ne soit pas remplis.


    Imaginons par exemple, une soirée dans un lieu où il n'y a pas de bus à  proximité.


    Je sais comment ne rien afficher dans le Label, mais cela affiche une cellule blanche car elle ne contient rien d'autre...


    Ma question est donc comment indiquer au TableView de supprimer cette cellule si elle est blanche ?


     


    Le mieux serait même de supprimer un Label s'il est vide et de faire en sorte que la cellule s'adapte d'elle même en remontant un autre Label situé plus bas et en diminuant la hauteur de la cellule...


    Est-ce que quelqu'un a une idée de comment faire ?


     


    Merci de votre aide,


    Nooka10


     


Connectez-vous ou Inscrivez-vous pour répondre.