2011-05-09 5 views
1

Je suis en train d'analyser une corde de mon plist et d'essayer de la diviser en deux parties pour les afficher en deux ou trois lignes selon la pause.Comment casser une corde en deux parties

NSArray * parts = [text componentsSeparatedByString:@"\n"]; // this text is coming from plist. 
int nthLine = 0; 
for(NSString *str in parts) 
{ 

CGRect outerFrame = CGRectMake(frame1.origin.x, frame1.origin.y + 45*nthLine, frame1.size.width, 45); 

SFNDoorStyledView * question = [[SFNDoorStyledView alloc]initWithFrame:outerFrame]; 
question.backgroundColor = [UIColor clearColor]; 
question.tag = 2; 
[question drawString:text inRect:CGRectMake(0,0,500,150) usingFontNamed:@"Futura-Bold" size:40.0 lineSpacing:40.0 kernValue:-3.0 color:@"#7d7066"]; 
[self.view addSubview:question]; 
} 
nthLine = nthLine +1; 
+0

Alors, quelle est votre question? Avez-vous une erreur? – edc1591

+0

Que se passe-t-il lorsque vous exécutez ce code et que vous attendiez-vous? – kubi

+0

La chaîne que j'essaie de casser est "Quand voulez-vous prendre votre retraite" et je veux qu'il casse après 'vous' Donc je l'ai converti en "Quand voulez-vous prendre sa retraite?" de telle sorte que 'quand est-ce que vous' apparaît en première ligne et le reste s'affiche en suivant. BUt avec ce code tout ce qui inclut \ n arrive en une ligne – Ashutosh

Répondre

0

en fait plist enregistre votre chaîne comme un texte. SO si vous entrez \ n il le prend comme un texte et non comme un saut de ligne. Malgré cela, je casse la ficelle en plist seulement. Par exemple: si vous avez une chaîne, quel est votre revenu mensuel actuel? et vous voulez le casser du revenu. Ensuite, vous pouvez écrire What is your et appuyez sur alt + enter et entrez le texte dans la nouvelle ligne.

0

Pensez à utiliser un UILabel pour tenir votre texte, vous pouvez modifier la taille de façon dynamique en fonction de la chaîne elle-même. Pas besoin d'inclure \n dans la chaîne. Juste taille/contraindre votre étiquette à la largeur dont vous avez besoin, et la hauteur sera calculée pour vous en fonction d'autres attributs comme la police et la taille de la police. Voici un extrait représentatif.

// Size the label based on the font and actual text 
UILabel *l = [[[UILabel alloc] initWithFrame:CGRectMake(10, 5, 300, 50)] autorelease]; 
l.font = [UIFont boldSystemFontOfSize:14.0]; 
l.lineBreakMode = UILineBreakModeWordWrap; 
l.textAlignment = UITextAlignmentCenter; 
l.numberOfLines = 0; // Allow for as many lines as needed 
l.backgroundColor = [UIColor clearColor]; 
CGSize constraintSize = CGSizeMake(300, MAXFLOAT); 
CGSize labelSize = [l.text sizeWithFont:l.font 
     constrainedToSize:constraintSize 
     lineBreakMode:UILineBreakModeWordWrap]; 
CGRect frame = l.frame; 
frame.size = labelSize; 
// Center it 
frame.origin.x = floor((320.0 - labelSize.width)/2.0); 
l.frame = frame; 

[v addSubview:l]; 
+0

Je ne peux pas. Je dois utiliser cette vue pour afficher le contenu que nous utilisons CoreText. – Ashutosh

0

Vérifiez si le séparateur de ligne est effectivement \n. Il pourrait également être \r. Donc, en utilisant componentsSeparatedByString:@"\r\n" pourrait aider.

3

Faites attention à ce que \ n signifie dans différents contextes.

Dans ce contexte

NSArray * parts = [text componentsSeparatedByString:@"\n"]; 

\ n est interprété comme un caractère de nouvelle ligne.

Dans votre plist \ n seront les caractères réels \ et n

Vous pouvez utiliser l'option-saisir pour ajouter le caractère de nouvelle ligne à la plist puis utilisez votre code ci-dessus ou mieux encore:

NSArray * parts = [text componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 

Ou si vous voulez utiliser cette coutume « \ n » delimiter vous pouvez utiliser

NSArray * parts = [text componentsSeparatedByString:@"\\n"];