Как разбить строку на две части - PullRequest
1 голос
/ 09 мая 2011

Я извлекаю строку из моего списка и пытаюсь разбить ее на две части, чтобы отобразить их в две или три строки в соответствии с разрывом.

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;

Ответы [ 4 ]

3 голосов
/ 10 мая 2011

Будьте внимательны, что \ n означает в разных контекстах.

В этом контексте

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

\ n интерпретируется как символ новой строки.

В вашем списке \ n будут реальные символы \, а n

Вы можете использовать option-enter, чтобы добавить символ новой строки в список, а затем использовать свой код выше или еще лучше:

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

Или, если вы хотите использовать этот пользовательский разделитель '\ n', вы можете использовать

NSArray * parts = [text componentsSeparatedByString:@"\\n"];
0 голосов
/ 16 мая 2011

На самом деле plist сохраняет вашу строку как текст.Поэтому, если вы введете \ n, он воспринимается как текст, а не как перевод строки.Несмотря на это, я ломаю строку только в plist.Например: если у вас есть строка, каков ваш текущий ежемесячный доход?и вы хотите оторвать это от дохода.Затем вы можете написать «Каков ваш» и затем нажать alt + enter и ввести текст в новой строке.

0 голосов
/ 10 мая 2011

Проверьте, действительно ли разделитель строк \n. Это также может быть \r. Так что использование componentsSeparatedByString:@"\r\n" может помочь.

0 голосов
/ 09 мая 2011

Подумайте об использовании UILabel для хранения текста, размер которого можно динамически изменять в зависимости от самой строки. Не нужно включать \n в строку. Просто установите размер / ограничьте размер нужной вам ширины, и высота будет рассчитана для вас на основе других атрибутов, таких как шрифт и размер шрифта. Вот представительский фрагмент.

// 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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...