2009-06-08 9 views
1

Dans Cocoa, il existe une méthode (lineBreakBeforeIndex:withinRange:) sur NSAttributedString pour trouver les sauts de ligne appropriés dans un texte.Comment transformer un texte en texte?

Étant donné que NSAttributedString n'existe pas sur l'iPhone, est-ce que quelqu'un a des suggestions pour des fonctionnalités similaires?

Edit: Réalisé que je suis vraiment à la recherche d'un algorithme Word-Wrap. Par exemple, je veux que le texte enveloppe 80 caractères; Où dois-je placer des sauts de ligne de sorte que les mots ne sont pas divisés sur deux lignes?

Éditer: Un exemple va probablement aider. Dites que j'ai les lignes suivantes:
Voici la ligne 1 qui ne sera probablement même pas de 80 caractères.
Voici une autre ligne avec un texte différent qui est plus long mais pas beaucoup.

Je voudrais le transformer en quelque chose comme:
Voici la ligne 1 qui probablement
ne sera pas même 80 caractères
longue.
Voici une autre ligne avec
texte différent qui est
plus long mais pas de beaucoup.

Edit: Je cherche à placer ce texte dans un UITextView afin que des modifications supplémentaires peuvent être (très similaire à une réponse cité par courriels)

+0

Avez-vous besoin de couper une chaîne dans un texte général ou spécifique comme UILabel par hasard? – stefanB

+0

La chaîne elle-même proviendrait d'une source extérieure; il ne proviendra pas (ou n'entre pas dans) un UILabel. – hjon

Répondre

0

Il existe déjà une question sur les algorithmes mot-wrap: Best word wrap algorithm?

+0

Cette question liée était la plus proche de ce que je recherchais, car je n'ai pas seulement besoin d'afficher les données avec un retour à la ligne, mais j'ai besoin de l'utilisateur pour l'éditer davantage. – hjon

0
NSString *newString = [oldString stringByReplacingOccurrencesOfString:@"\n" withString:@"<br />"]; 

qui trouveront tous vos sauts de ligne et remplacer avec une balise "
". Il suffit de l'éditer pour vos propres besoins. :)

+0

Désolé, je n'ai pas très bien posé la question. J'espère que mon édition le rend plus clair. – hjon

1

Tout dépend de ce que vous avez besoin pour, vous pouvez aligner le texte de rupture dans UILabel (par exemple, si vous faites un texte multiligne par exemple à l'intérieur UITableViewCell) .

Voir:

http://www.doubleencore.com/blog/2009/01/18/iphone-dev-tip-using-uilabels-numberoflines-adjustsfontsizetowidth/

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UILabel_Class/Reference/UILabel.html#//apple_ref/occ/instm/UILabel/textRectForBounds:limitedToNumberOfLines:

http://blog.sallarp.com/iphone-uilabel-multiline-dynamic-height/

Cette méthode spécifie la taille (rect) dans laquelle le texte a besoin pour s'adapter - vous pouvez probablement le mettre à jour pour calculer ce la taille est de 80 caractères avec votre police, puis créer un rectangle de cette taille, puis ajuster le texte à l'intérieur.

+0

Malheureusement, je veux placer ceci dans un UITextView afin que des éditions additionnelles puissent être faites (semblables aux réponses citées dans un email). – hjon

0

Il ne répond pas directement à la question OPs, mais ce anwer est celui que je cherchais quand une recherche m'a à cette question:

Sizing a UILabel to fit?

et en particulier cette réponse de BadPirate:

@interface UILabel (BPExtensions) 
- (void)sizeToFitFixedWidth:(CGFloat)fixedWidth; 
@end 

@implementation UILabel (BPExtensions) 


- (void)sizeToFitFixedWidth:(CGFloat)fixedWidth 
{ 
    self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, fixedWidth, 0); 
    self.lineBreakMode = UILineBreakModeWordWrap; 
    self.numberOfLines = 0; 
    [self sizeToFit]; 
} 
@end 

alors d'avoir une étiquette d'avoir une hauteur variable multiligne mais une largeur fixe juste:

[myLabel sizeToFitFixedWidth:kSomeFixedWidth];

Questions connexes