UITableView: afficher un total dans la dernière cellule

Claude1967Claude1967 Membre
janvier 2016 modifié dans API UIKit #1

Bonsoir , j'aurai une autre petite question ??

Est-il possible que l'on puisse ajouter une cell en plus dans un résultat de tableView pour y faire un total des heures ?

Comme ça la dernière cellule m'indiquerai le total de heures ??


 


 


Modérateur: il s'agit d'une nouvelle question, j'ai donc scindé la discussion originale. Merci de ne poser qu'une question par sujet pour que les réponses ne se croisent pas.


Réponses

  • Oui, c'est possible, en modifiant la DataSource de la tableView. Comment fais-tu pour construire ta tableView ? Quel type de cellules utilises-tu ?

  • En supposant que tu feeds ta UITableView avec un NSArray.


     


    Dans la méthode qui indique le nombre de cellules, il faut renvoyer [tonNSArray count]+1. Je n'ai pas explicitement nommé la méthode, car cela peut changer en fonction de sections, etc.


    Dans la méthode qui file les UITableViewCell et les configure : quand tu arrives au NSIndexPath qui correspond, tu remplis les données de ta cellules avec celle spéciale.


  • DrakenDraken Membre
    janvier 2016 modifié #4

     


     


    J'ai repris les codes qui ce crée, quant tu crées ta classe TableViewControler .
    Merci pour la réponse je vais chercher sur ( modifier DataSource )

     


    Quand Xcode crée une classe TableViewControler, il génère aussi sa DataSource. Ce sont les méthodes permettant d'indiquer à  la TableView ce qu'elle doit afficher.


     


    Par exemple, quand tu crée un TableViewControler, tu as ces méthodes :



    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 0
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return 0
    }

    /*
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)

    // Configure the cell...

    return cell
    }
    */

    C'est du Swift, parce que pour moi la syntaxe de l'objectif-C est du martien. Mais les principes sont les mêmes.


     


    numberOfSectionsInTableView sert à  indiquer le nombre de sections dans la tableView. Je présume que tu n'as qu'une seule section et retourne la valeur 1.



    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
    }


    Je ne sais pas comment tes données sont définies. Je vais prendre comme hypothèse que les heures sont stockées dans un tableau alphanumérique. Ton code doit ressembler à  ça :



    // Définition du nombre de cellules dans la tableView
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return tableauDesHeures.count
    }

    Tu dois remplir les cellules en passant par cette méthode :



    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)

    // Configure the cell...
    cell.textLabel?.text = tableauDesHeures[indexPath.row]

    return cell
    }

    Pour ajouter une nouvelle cellule, tu dois augmenter de 1 le nombre de cellules



    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return tableauDesHeures.count + 1
    }

    Et modifier le système de remplissage, pour tenir compte de la dernière cellule.



    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("reuseIdentifier", forIndexPath: indexPath)

    // La cellule demandée par le système est-elle une heure du tableau ?
    if indexPath.row < tableauDesHeures.count {
    // OUI => La cellule contient une heure
    cell.textLabel?.text = tableauDesHeures[indexPath.row]
    } else {
    // NON => La cellule contient la somme des heures
    cell.textLabel?.text = sommeDesHeures
    }

    return cell
    }


    Je ne garantit pas que ce code fonctionne. C'est du Swift, tapé à  la vas-vite sans test. Mais le principe est là . A toi de t'en inspirer.


     


    Je te recommande d'utiliser une couleur différente pour afficher la somme des heures, pour améliorer la lisibilité.

  • Je fais un essai de que je rentre , merci
  • Bonsoir Malheuresusement ca ne fonctionne pas snifffff


     


    a chaque fois que je met :


         


                               return [tableauMois count]+1;


     


    et bien sur 


     


     


        if (indexPath.row < tableauMois.count) {


            cell.textLabel.text = concatenation  ;


            cell.detailTextLabel.text =  [jours article];


            


        } else {


            cell.textLabel.text = @Total;


            cell.detailTextLabel.text =@Sous total ;


            


    il me crash mon application avec 

     

    2016-01-07 16:33:01.380 Journal[90853:16253875] Unknown class _TtC7journal14ViewController in Interface Builder file.

    2016-01-07 16:33:08.267 Journal[90853:16253875] Voici le moi Choisis janvier 2016


    2016-01-07 16:33:38.379 Journal[90853:16253875] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 6 beyond bounds [0 .. 5]'


     


     


     


    merci .


     

  • LarmeLarme Membre
    janvier 2016 modifié #7

    [jours article]: Tu récupères pas jours avec tableauMois[indexPath.row] ? Il faut le faire après le test indexPath.row < tableauMois.count.




  • [jours article]: Tu récupères pas jours avec tableauMois[indexPath.row] ? Il faut le faire après le test indexPath.row < tableauMois.count.




    pfffft c'était si simple ca fonctionne , MERCI


    mais je n'arrive pas à  Additionné les chiffes grrr au retour du 2er  index ma valeur vaut aléatoirement  + 1000 ou 2300 alors que je lui et 


    juste ajouter 2 + 4


     


    j'ai essayer avec des int ou des Nsnumber fait ca fait pareil , je cherche je cherche lollll


     


    mais encore merci pour votre aides.


     


    Claude

  • Il va falloir être plus explicite sur ta méthode de calcul...




  • Il va falloir être plus explicite sur ta méthode de calcul...




     


    a chaque fois que je prend le 


                                                    NSString *deuxiemeChaine = [jours heure];


    je le convertis deuxiemeChaine en integer


     


     NSInteger HeureEnNombre = [deuxiemeChaine intValue];


     


    j'ai crée un integer dans mon .h  


     


    @property (strong, nonatomic) NSNumber *MemoireHeure;


     


     


    et la je bloque car je ne peux pas faire


     


    _MemoireHeure = _MemoireHeure + HeureEnNombre;


     


     


    et quant suis a a dernier Cellule je la reconvertit en NSString et l'ajoute  cell.textLabel.text  


     


    mais je ne trouve pas comment faire .


     


     


     


     


     



  • a chaque fois que je prend le 


                                                    NSString *deuxiemeChaine = [jours heure];


    je le convertis deuxiemeChaine en integer


     


     NSInteger HeureEnNombre = [deuxiemeChaine intValue];


     


    j'ai crée un integer dans mon .h  


     


    @property (strong, nonatomic) NSNumber *MemoireHeure;


     


     


    et la je bloque car je ne peux pas faire


     


    _MemoireHeure = _MemoireHeure + HeureEnNombre;


     


     


    et quant suis a a dernier Cellule je la reconvertit en NSString et l'ajoute  cell.textLabel.text  


     


    mais je ne trouve pas comment faire .


     


     


     


     


     




    oops je vient de me rendre compte que je prend "02:00" donc impossible avec les ":" 



  • a chaque fois que je prend le 


                                                    NSString *deuxiemeChaine = [jours heure];


    je le convertis deuxiemeChaine en integer


     


     NSInteger HeureEnNombre = [deuxiemeChaine intValue];


     


    j'ai crée un integer dans mon .h  


     


    @property (strong, nonatomic) NSNumber *MemoireHeure;


     


     


    et la je bloque car je ne peux pas faire


     


    _MemoireHeure = _MemoireHeure + HeureEnNombre;


     


     


    et quant suis a a dernier Cellule je la reconvertit en NSString et l'ajoute  cell.textLabel.text  


     


    mais je ne trouve pas comment faire .


     


     


     


     


     




     




    Il va falloir être plus explicite sur ta méthode de calcul...




    j'essaye une autre méthode , mais elle ne fonctionne pas non plus , pourriez vous m'aider ?


     


    j'ai déclaré un       @property (strong, nonatomic) NSMutableArray *HeuresDansLeTableau;


    je l'ai bien mis dans le M


                                   @synthesize ; HeuresDansLeTableau;


     


    et a chaque fois que j'ajoute dans la cellule , j'ajoute dans le tableau comme ceci 


     


                  cell.textLabel.text = concatenation  ;


            cell.detailTextLabel.text =  [jours article];


           


            [self.moisDansLeTableau addObject:deuxiemeChaine];


            


    et mon tableau reste toujours Vide !!! je ne comprend pas pourquoi ??

  • DrakenDraken Membre
    janvier 2016 modifié #13

    Plutôt que de donner des morceaux de code ici et là , tu ne peux pas nous montrer le code complet de ton UITableViewControler, histoire de comprendre ce qui s'y passe ? 


     


    Utilise la balise code pour insérer le source dans ton texte. C'est la balise <>, à  coté de la bulle de bande dessinée dans le menu.


     


     



  • Plutôt que de donner des morceaux de code ici et là , tu ne peux pas nous montrer le code complet de ton UITableViewControler, histoire de comprendre ce qui s'y passe ?


    Utilise la balise code pour insérer le source dans ton texte. C'est la balise <>, à  coté de la bulle de bande dessinée dans le menu.




    Pas de soucis je fais ça de que j'ai repris le code , car je ne suis pas souvent à  la maison, je suis chauffeur poids-lourd.
  • DrakenDraken Membre
    janvier 2016 modifié #15

    Si tu es un autodidacte n'ayant plus codé depuis 6 ans, sans formation d'informaticien tu ferais bien de laisser tomber l'Objective-C pour passer à  Swift. C'est nettement plus simple à  maitriser, d'autant plus qu'Objective-C a beaucoup évolué en 6 ans. Tes souvenirs sont forcément obsolètes. Tu devras passer un certain temps à  comprendre les évolutions du langage. Autant repartir sur un langage plus simple et plus efficace. Si Apple a sortit Swift c'est pour simplifier la programmation et remplacer à  terme Objective-C.


     


    Il y a un cours en vidéo sur le langage Swift dans ma signature, en provenance de l'université de Jussieu.


  • Si tu es un autodidacte n'ayant plus codé depuis 6 ans, sans formation d'informaticien tu ferais bien de laisser tomber l'Objective-C pour passer à  Swift. C'est nettement plus simple à  maitriser, d'autant plus qu'Objective-C a beaucoup évolué en 6 ans. Tes souvenirs sont forcément obsolètes. Tu devras passer un certain temps à  comprendre les évolutions du langage. Autant repartir sur un langage plus simple et plus efficace. Si Apple a sortit Swift c'est pour simplifier la programmation et remplacer à  terme Objective-C.


    Il y a un cours en vidéo sur le langage Swift dans ma signature, en provenance de l'université de Jussieu.




    Ha bon c'est une nonne nouvelle ça !!

    Je vais regarder un peux de que je suis rentré .


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