2010-09-14 4 views
0

Je fais un analyseur RSS pour iPhone et iPod Touch et je dois être en mesure de définir le nombre de lignes affichées dans chaque cellule pour chaque article. Je voudrais casser tous les 39 caractères, ce qui correspond le plus à une ligne à la taille de police que j'utilise.Calcul des sauts de ligne tous les N caractères?

Je voudrais prendre le nombre de caractères dans une chaîne et le diviser par le nombre de caractères par ligne. J'aimerais avoir un entier comme réponse, arrondi au besoin.

C'est ce que j'ai jusqu'à présent. Qu'est-ce qui ne va pas?

NSNumber *lines = [[NSNumber alloc] initWithInteger:[cell.textLabel.text length]/kLineLength]; 

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 

    [formatter setRoundingMode:NSNumberFormatterRoundUp]; 
    [formatter setRoundingIncrement:[[[NSNumber alloc]initWithInteger:1]autorelease]]; 

    NSNumber *roundedLines = [[NSNumber alloc]initWithInteger: [[formatter numberFromString:[lines stringValue]]integerValue]]; 

    [cell.textLabel setNumberOfLines:[roundedLines integerValue]]; 

    [roundedLines release]; 
    [formatter release]; 
    [lines release]; 

EDIT

Je ne suis pas après les sauts de ligne tant que de savoir combien de lignes pour donner l'étiquette. Donc, bien que je mette effectivement des sauts de ligne, je ne le fais pas vraiment. Je laisse l'iOS déterminer où casser, je lui dis simplement combien de lignes utiliser.

Répondre

0

Je ne sais pas si cette solution compliquée que vous avez donné était une blague :-)

int numberOfCharacters = ....; 
int kLineLength = 39; 

int lines = (numberOfCharacters + kLineLength - 1)/kLineLength; 

Pas besoin formatteurs etc.

Edit: Vous aurez probablement déçu par la largeur des lignes fixes de toute façon, comme mot l'emballage va (devrait!) faire vos lignes plus courtes de toute façon.

+0

Le problème est que je ne sais pas combien de temps mes titres seront et je ne sais pas combien de lignes à utiliser. J'ai besoin de calculer cela à la volée pour chaque titre. – Moshe

0

Je ne suis pas sûr de ce que vous essayez d'accomplir exactement ici, mais vous ne pouvez pas être en mesure d'utiliser cell.textLabel et doivent utiliser une UITableViewCell .. personnalisée

également l'objet UILabel produit automatiquement les sauts de ligne si nécessaire si vous définissez le cell.textLabel.numberOfLines = 2;

+0

À droite, mais si je le mets à 2, je perdrai du texte s'il dépasse 2 lignes. J'essaie de comprendre à quoi sert 'numberOfLines'. – Moshe

1

Ne faites pas cela vous-même. Laissez le UILabel ou le UITextView ou le UIWebView faire cela pour vous. Chaque lettre a une largeur différente. Cela n'a aucun sens d'insérer des sauts de ligne pour tous les caractères N. Je veux dire, la composition est un art sophistiqué, cultivé depuis l'époque de Gutenberg pour des centaines d'années. Je n'ose pas le faire moi-même. Laissez cela aux experts (c'est-à-dire aux développeurs d'API.)

+0

Je ne suis pas en train d'implémenter les sauts de ligne, je ne fais que définir la propriété "lines" de 'textLabel'. – Moshe

+0

Ah, alors cela a du sens :) Alors vous devriez dire que dans votre question ...: p – Yuji

+0

ok, je l'ai ajouté. – Moshe

Questions connexes