151 votes

Comment envelopper texte dans un UITableViewCell sans une cellule personnalisé

C'est sur iPhone 0S 2.0. Réponses pour 2.1 sont bien aussi, même si je ne suis pas au courant de toutes les différences concernant les tables.

Il se sent comme il devrait être possible d'obtenir un texte pour envelopper sans la création d'une cellule personnalisé, depuis un UITableViewCell contient un UILabel par défaut. Je sais que je peux le faire fonctionner si je créer une cellule personnalisé, mais ce n'est pas ce que je suis en train de réaliser - je veux comprendre pourquoi mon approche actuelle ne fonctionne pas.

J'ai compris que l'étiquette est créée à la demande (depuis la cellule prend en charge le texte et l'accès à l'image, afin de ne pas créer la vue de données jusqu'à ce que nécessaire), si je fais quelque chose comme ceci:

cell.text = @""; // create the label
UILabel* label = (UILabel*)[[cell.contentView subviews] objectAtIndex:0];

puis-je obtenir une étiquette valide, mais la définition d' numberOfLines (et lineBreakMode) ne fonctionne pas - je reçois toujours la seule ligne de texte. Il y a beaucoup de hauteur dans l' UILabel pour le texte à afficher - je suis juste de retour d'une grande valeur pour la hauteur en heightForRowAtIndexPath.

278voto

Tim Rupe Points 3310

Voici une façon simple, et ça fonctionne pour moi:

À l'intérieur de votre cellForRowAtIndexPath: fonction. La première fois que vous créez votre cellule:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
    cell.textLabel.numberOfLines = 0;
    cell.textLabel.font = [UIFont fontWithName:@"Helvetica" size:17.0];
}

Vous remarquerez que j'ai mis le nombre de lignes de l'étiquette à 0. Cela lui permet d'utiliser autant de lignes que nécessaire.

La partie suivante est de spécifier la taille de votre UITableViewCell sera, donc, le faire dans votre heightForRowAtIndexPath fonction de:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellText = @"Go get some text for your cell.";
    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:17.0];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    return labelSize.height + 20;
}

J'ai ajouté 20 ma retourné la hauteur de la cellule parce que j'aime un peu de tampon autour de mon texte.

17voto

ddiego Points 886

Réponse de Tim Rupe mise à jour pour iOS7 :

4voto

Un bref commentaire / réponse pour enregistrer mon expérience lorsque j'ai eu le même problème. En dépit de l'utilisation des exemples de code, l'affichage de la table hauteur de la cellule s'adapte, mais l'étiquette à l'intérieur de la cellule n'était pas encore en ajustant correctement la solution était que j'était en train de charger ma cellule à partir d'une simple PLUME de fichier, ce qui se passe après la hauteur de la cellule ajusté.

Et j'ai eu mes réglages à l'intérieur de la PLUME de fichier pour ne pas renvoyer le texte, et seulement 1 ligne pour l'étiquette; la PLUME fichier de paramètres ont été annulent les paramètres j'ai ajusté à l'intérieur du code.

La leçon que j'ai pris était de faire en sorte de toujours garder à l'esprit ce que l'état de l'objet sont à chaque point dans le temps - qu'ils n'auraient pas encore été créé! ... hth quelqu'un en bas de la ligne.

3voto

Arshad Parwez Points 834

Si nous voulons n'ajouter que du texte en cellule, nous avons besoin de seulement deux délégués pour travailler avec (pas besoin d’ajouter extra )

1)``

2)``

Cette solution a fonctionné pour moi :-

Ici la chaîne `` est un tableau mutable d'où je me fais mes données.

EDIT :- Voici le tableau que j’ai pris.

0voto

dukz Points 1021

Je pense que c'est une solution meilleure et plus courte. Formatez simplement le UILabel ( textLabel ) de la cellule pour calculer automatiquement la hauteur en spécifiant sizeToFit et tout devrait bien se passer.

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Configure the cell...
    cell.textLabel.text = @"Whatever text you want to put here is ok";
    cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
    cell.textLabel.numberOfLines = 0;
    [cell.textLabel sizeToFit];

    return cell;
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X