2009-05-22 7 views

Répondre

2

Vous pouvez le faire sans sous-classement UITableViewCell.

Dans la méthode tableView:cellForRowAtIndexPath:, créez une base UITableViewCell et modifiez les propriétés du UILabel contenu dans cette cellule. Changez le nombre maximum de lignes pour adapter plus de texte dans votre cellule.

Malheureusement, l'étiquette de la cellule n'est pas accessible aux propriétés, vous devez donc la récupérer avec la propriété subviews.

Bien sûr, cela utilise un détail d'implémentation de UITableViewCell, de sorte qu'il risque de rompre avec les futures versions du SDK. Utiliser avec précaution.

Voici un exemple:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"YourCellId"]; 
    if (cell == nil) 
    { 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"YourCellId"] autorelease]; 
     cell.font = [UIFont systemFontOfSize:16]; 
     UILabel* cellLabel = [cell.contentView.subviews objectAtIndex:0]; 
     [cellLabel setNumberOfLines:3]; 
    } 
    cell.text = @"Your text"; 
    return cell; 
} 

Mise à jour:

Pour définir la hauteur de ligne pour ajuster le texte, vous pouvez effectuer les opérations suivantes:

1. Définissez la cellule hauteur pour s'adapter au texte.

Vous avez besoin quelque chose comme ceci:

CGSize textSize = [text sizeWithFont:font 
        constrainedToSize:CGSizeMake(313, 1000) 
         lineBreakMode:UILineBreakModeWordWrap]; 
cell.frame = CGRectMake(0.0f, 0.0f, 320.0, textSize.height); 

2. Retour la hauteur de la cellule dans la méthode tableView:heightForRowAtIndexPath:.

Par exemple comme ceci:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell* cell = [self tableView:(UITableView*)self.view cellForRowAtIndexPath:indexPath]; 
    CGRect cellFrame = cell.frame; 
    return cellFrame.size.height; 
} 
+0

Merci! Mais dans mon AwakeFromNib, j'ai ce code "self.jokeTableView.rowHeight = 70.0;" Comment faire pour que le rowHeight change en fonction de la quantité de texte nécessaire? –

+0

J'ai ajouté un exemple de comment faire cela dans ma réponse. J'espère que cela aide. – henning77

0

Sous UITableViewCell, et dans la méthode loadView de la sous-classe, créez un UILabel dans son contentView. Définissez cette étiquette pour qu'elle contienne l'habillage et l'emplacement appropriés.

+0

Puis-je spécifier dans cette méthode? - (UITableViewCell *) tableViewCell: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath –

+0

Parce que c'est où j'ai changé la taille du texte, et cela a fonctionné –

+0

Vous ne pouvez pas spécifier tout dans cette méthode. Vous devrez modifier la hauteur de chaque cellule, en fonction de la longueur du texte que vous souhaitez afficher. Vous devrez également définir le nombre maximum de lignes que UILabel peut afficher à un nombre supérieur à 1. – mmc

0

Adam a raison. Pour un peu plus de détails (ainsi qu'une méthode qui défile à la vitesse de l'éclair), vous pouvez consulter cette entrée sur atebits.com qui contourne entièrement l'approche UILabel.

Loren Brichter's UITableViewCell subclassing example

Vous pouvez également regarder l'exemple de TableViewSuite developer.apple.com Il contient 5 exemples différents, en complexité croissante, pour la construction de TableViews personnalisés. Le dernier exemple est structurellement très similaire au tutoriel sur atebits.com.

La leçon 8 du cours sur l'iPhone de Stanford porte également sur Scroll et TableViews, et présente quelques exemples de sous-classe UITableViewCell.

iPhone Course

Questions connexes