UITableViewCell, insertion de sous-titres

tbilletbille Membre

Bonjour à  tous,


 


aujourd'hui j'ai un nouveau petit souci :


j'ai une page tableView avec plusieurs cellules. J'aimerai ajouter des sous-titres qui peuvent être modifié à  partir du code.


 


Par exemple si je vais sur la première cellule, celle ci m'amène sur une vue où je saisie quelques données. Quand je reviens sur la tableView j'aimerai faire un petit récapitulatif de ce qu'il a saisie dans les sous-titres.


 


J'ai initialisé mes cellules pour pouvoir mettre des sous-titres, mais je ne trouve pas la fonction pour éditer les sous-titres... (oui je suis passé sur la doc ^^)


 


merci à  tous,


tbille


Mots clés:

Réponses

  • LarmeLarme Membre
    mai 2013 modifié #2

    cell.detailTextLabel.text = @XxX;

    Pour accéder à  la cellule, ça se fait via 



    [tableView cellForRowAtIndexPath:indexPath];
  • tbilletbille Membre

    Ok j'avais pas mit le .text


     


    merci beaucoup


    tbille


  • LarmeLarme Membre

    Si tu préfères, normalement tu peux aussi faire 



    [cell.detailTextLabel setText = @XxX;]
  • Am_MeAm_Me Membre
    mai 2013 modifié #5

    Je poursuit le probleme mon label detail ne s'affiche pas sauf si je fais : 



    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    Et ca ne marche pas tres bien c'est a dire de base ma tableviewcell me mene vers une autre vue , bah qund je met la ligne du dessus ca ne le fait plus


     


    Actuellement j'ai ca mais ca ne permet pas l'affichage du detail : 



    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@MyBasicCell];

    Quelqu'un aurait une idee ?




  • Je poursuit le probleme mon label detail ne s'affiche pas sauf si je fais : 



    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    Et ca ne marche pas tres bien c'est a dire de base ma tableviewcell me mene vers une autre vue , bah qund je met la ligne du dessus ca ne le fait plus


     


    Actuellement j'ai ca mais ca ne permet pas l'affichage du detail : 



    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@MyBasicCell];

    Quelqu'un aurait une idee ?




     


    Pas très claire ton histoire. De quel label parles-tu ? (le sujet ici c'est detailTextLabel, une propriete de UITableViewCell). Utilises-tu Storyboard ? N'hésite pas à  monter l'ensemble du code de ta méthode.

  • Am_MeAm_Me Membre
    mai 2013 modifié #7


    Pas très claire ton histoire. De quel label parles-tu ? (le sujet ici c'est detailTextLabel, une propriete de UITableViewCell). Utilises-tu Storyboard ? N'hésite pas à  monter l'ensemble du code de ta méthode.




     


    La je suis plus au travail.... Je vous montrerai demain 


    Mais sinon je peux vous expliquer avec des images sur internet en gros


     


    http://s3.amazonaws.com/skillshare/uploads/project/fa1eaee0121b0b404e54f40d6e15e314/492491c2


     


     


    en gros ma tableview ressemble à  ça 


     


    Et si je rajoute le detailLabel de UITableview cell ca ne fait rien 


     


    Bon jusqu'à  là  j'espère que vous comprenez


     


     


    //////////////////////////////////// petite séparation moche :) /////////////////////////////////////////


     


     


    Et sur le net j'ai trouvé un moyen d'afficher le detailText de la cell mais je me trouve avec quelque chose comme ca





    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    detailTextLabel.jpg


     


    C'est cool j'ai mon detail qui s'affiche mais pas la petite flèche à  droite qui me permet de switchez de vue


     


    Je vais essayer de faire un projet simple tout à  l'heure sur mon mac pour vous illustrer la chose 


     


    Si c'est pas clair je vous enverrai de vrais screens demain


  • KubernanKubernan Membre
    mai 2013 modifié #8

    Ce que tu appelles la "petite flèche" est un disclosure indicator. Pour le faire apparaà®tre il faut positionner la propriété accessoryType de ta cell à  UITableViewCellAccessoryDisclosureIndicator :



    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator

    Si tu utilises Storyboard, tu peux positionner cette valeur par défaut pour ta cell dans l'inspecteur d'attribut.


     


    Plus d'info sur la gestion des cell, toujours et encore dans la doc Apple.


  • Am_MeAm_Me Membre
    mai 2013 modifié #9

    Bon me revoila donc oui j'ai pu utiliser le accessory type mais toujours le même problème le détail ne s'affiche pas 


     


    Et bien entendu voici l'image 


    http://www.hostingpics.net/viewer.php?id=428240Capturedcran20130502223939.png



    Mon .h

    #import <UIKit/UIKit.h>


     


    @interface ViewController : UIViewController <UITableViewDelegate,UITableViewDataSource>


    {


        IBOutlet UITableView *mainTableView;


    }


    @property (nonatomic,retain) IBOutlet UITableView *mainTableView;


     


    @end


     


     





    Mon .m



    #import "ViewController.h"


     


    @interface ViewController ()


    {


        NSMutableArray *tableau;


    }


    @end


     


    @implementation ViewController


     


    @synthesize mainTableView;


     


    - (void)viewDidLoad


    {


        [super viewDidLoad];


    // Do any additional setup after loading the view, typically from a nib.


    }


     


    - (void)didReceiveMemoryWarning


    {


        [super didReceiveMemoryWarning];


        // Dispose of any resources that can be recreated.


    }


     


    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {


        return 1;


    }


     


    - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {


        return 3;


    }


     


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


        static NSString *cellId = @identifier;


        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellId];


        if (cell == nil) {


            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];


        }


        //[cell setText:[NSString stringWithFormat:@e%@",indexPath]:[indexPath row]];


        cell.textLabel.text = @Ma phrase;


        cell.textLabel.textColor = [UIColor redColor];


        cell.detailTextLabel.text = @Ma phrase en detail;


        


        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;


        


        


         return cell;


    }


     


    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath


    {


        


    }


     


    @end


  • Am_MeAm_Me Membre
    mai 2013 modifié #10

    Problème résolu temporairement car ça a marché chez moi mais pas au travail, merci @Kubernan


    Je vous re-contacterai demain si ça ne vous dérange pas avec mon autre code qui ne passe pas très bien


     


    Enfin j'ai juste remplacé la ligne 



    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellId];

     

     


    Par la ligne 



    UITableViewCell cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@identifier];

  • LarmeLarme Membre

    Normalement, ceci devrait faire l'affaire :



    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellId];
    if (cell == nil)
    {
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
    }
  • Am_MeAm_Me Membre


     


    Normalement, ceci devrait faire l'affaire :



    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: cellId];
    if (cell == nil)
    {
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
    }



     


    Ah pas faux dans ce code ça marche, mais au travail sur un projet ça ne marche pas et donc ça me tracasse. j'essaierai demain matin et je vous tiendrai au courant

  • Et dans les deux cas tu as la même configuration ? Je veux dire version de Xcode, utilisation de Storyboard par exemple ?


  • Reprenons depuis le début.


     


    Quand on utilise le storyboard il ne faut pas utiliser initWithStyle car dequeueReusableCellWithIdentifier ne rend jamais nil si l'identifiant passé en paramètre a été déclaré dans un template de cellule dans le storyboard.


    La bonne pratique est de créer des templates de cellule dans le storyboard en prenant soin d'y définir l'identifiant et le style de cellule, voire sa classe si l'on veut une classe de cellule particulière.




  • Reprenons depuis le début.


     


    Quand on utilise le storyboard il ne faut pas utiliser initWithStyle car dequeueReusableCellWithIdentifier ne rend jamais nil si l'identifiant passé en paramètre a été déclaré dans un template de cellule dans le storyboard.


    La bonne pratique est de créer des templates de cellule dans le storyboard en prenant soin d'y définir l'identifiant et le style de cellule, voire sa classe si l'on veut une classe de cellule particulière.




     


    À mon avis on va le voir souvent ce code d'init d'une cell : j'ai bien l'impression que certains se lancent dans Storyboard en reprenant des bouts de code qui ne prennent pas en compte Storyboard. Sacré mélange.


    C'est lassant surtout que la doc. Apple est très claire sur ce sujet.

  • Am_MeAm_Me Membre
    mai 2013 modifié #16


    À mon avis on va le voir souvent ce code d'init d'une cell : j'ai bien l'impression que certains se lancent dans Storyboard en reprenant des bouts de code qui ne prennent pas en compte Storyboard. Sacré mélange.


    C'est lassant surtout que la doc. Apple est très claire sur ce sujet.




     


    Je suis desole si je suis lassant mais je suis un newbie :(  , je suis CONSCIENT que la doc d'Apple est SUPERBE, il me semble que pour un petit souci comme celui la ou tant d'autre la doc serai une perte de temps enfin je crois. Mais la je n'utilise pas le intWithStyle car ca ne me plait pas écrit comme au dessus  :D mais @Larme me l'a propose mais j'ai oublie de vous signaler que j'utilisais le storyboard dsl


     


     


    Voici le code en question


     


    JE n'UTILISE PAS le initWithStyle comme vous l'aviez demande mais que je l'utilise ou pas ca ne marche pas



    static NSString *CellIdentifier = @MyBasicCell;
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        /*
    if(cell==nil)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        }*/
        
         
        cell.textLabel.text = @PS .;
        cell.detailTextLabel.text=@Bla;
       
        return cell;
        
    }

    Voici 2 images du storyboard


     


    http://www.hostingpics.net/viewer.php?id=583550Capturedcran20130503111000.png


    http://www.hostingpics.net/viewer.php?id=935228Capturedcran20130503111237.png


     


     


    Et du resultat 


    http://www.hostingpics.net/viewer.php?id=377576Capturedcran20130503101347.png


  • Am_MeAm_Me Membre
    mai 2013 modifié #17


    Et dans les deux cas tu as la même configuration ? Je veux dire version de Xcode, utilisation de Storyboard par exemple ?




     


    Oui voila c'est ca j'ai la meme version et j'utilise dans les 2 cas le storyboard


     


    Donc voir ci-dessus le code + images




  • Je suis desole si je suis lassant mais je suis un newbie :(  , je suis CONSCIENT que la doc d'Apple est SUPERBE, il me semble que pour un petit souci comme celui la ou tant d'autre la doc serai une perte de temps enfin je crois. Mais la je n'utilise pas le intWithStyle car ca ne me plait pas ecrit au dessus  :D mais @Larme me l'a propose mais j'ai oublie de vous signaler que j'utilisais le storyboard dsl


     


     


    Voici le code en question


     


    JE n'UTILISE PAS le initWithStyle comme vous l'aviez demande mais que je l'utilise ou pas ca ne marche pas



    static NSString *CellIdentifier = @MyBasicCell;
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        /*
    if(cell==nil)
        {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
        }*/
        
        NSString *cellText = nil;
        NSString *cellTextDetail = nil;
     
         
        cell.textLabel.text = @PS .;
        cell.detailTextLabel.text=@Bla;
       
        return cell;
        
    }

    Voici une image du storyboard


     


    http://www.hostingpics.net/viewer.php?id=928668Capturedcran20130503101209.png


     


    Et du resultat 


    http://www.hostingpics.net/viewer.php?id=377576Capturedcran20130503101347.png




     


    Il te suffit de choisir la type de cell que tu veux dans la partie Style (qui est actuellement à  Basic) dans la partie du Storyboard où tu as fait ta capture écran.


     



     


    mais j'ai oublie de vous signaler que j'utilisais le storyboard

     



     


    Je t'ai posé la question de l'utilisation Storyboard depuis le début. D'autres aussi l'ont mentionné. Faudrait lire attentivement.


     


     



     


    Je suis desole si je suis lassant, je suis CONSCIENT que la doc d'Apple est SUPERBE, il me semble que pour un petit souci comme celui la ou tant d'autre la doc serai une perte de temps enfin je crois.

     



     


    Une perte de temps comparé au temps passé à  poster ton problème ? (Et sans prendre en compte le temps qu'on prend pour te répondre ?). La doc Apple contient même le code complet qu'il suffit de copier/coller et d'adapter à  ton besoin.

  • Am_MeAm_Me Membre


    Il te suffit de choisir la type de cell que tu veux dans la partie Style (qui est actuellement à  Basic) dans la partie du Storyboard où tu as fait ta capture écran.


     


     


    Une perte de temps comparé au temps passé à  poster ton problème ? (Et sans prendre en compte le temps qu'on prend pour te répondre ?). La doc Apple contient même le code complet qu'il suffit de copier/coller et d'adapter à  ton besoin.




     


    MERCI oui il fallait donc juste changer le type de la cell


     


    Je ferai plus attention a la doc alors :) desole pour le derangement.


    C'est vrai que ce n'est pas une perte de temps mais la actuellement je refait le projet ,avec le storyboard , d'une personne qui l'a fait avec des .xib donc je me suis dit que le code sur la cell allait marche mais non. Je vous en remercie :D 

  • AliGatorAliGator Membre, Modérateur

    Tu aurais lu le TableView Programming Guide tu aurais eu toutes les réponses à  tes questions en lisant que quelques pages de doc, et en plus aurait appris beaucoup sur le fonctionnement global des TableViews.


    La doc n'est JAMAIS une perte de temps.


  • Am_MeAm_Me Membre
    mai 2013 modifié #21


    Tu aurais lu le TableView Programming Guide tu aurais eu toutes les réponses à  tes questions en lisant que quelques pages de doc, et en plus aurait appris beaucoup sur le fonctionnement global des TableViews.


    La doc n'est JAMAIS une perte de temps.




     


    Je ne dis plus le contraire maintenant @Kubernan m'en a convaincu. :D .


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