TextField로로드 할 문자열이있는 경우 어떻게하면 줄 바꿈을 \ n 10 개 문자 (공백 및 띄어쓰기 포함) 하지만 다음 줄 중간 단어로 이동하지 마십시오 ... 최대 10 자로 텍스트를 감싸는 것처럼? 하지만 UITextField로 래핑하는 것이 아닙니다. 입력 한 내용이 다른 것에서도 사용될 것이기 때문에 실제로 입력해야합니다. (이것이 중요하다면 iOS를위한 것입니다.) 어떤 도움도 감사 할 것입니다. 정말 붙어 있습니다!Objective-c 줄 바꿈 문자 10 개 (줄 바꿈)
답변
. 여기에 대답해야합니다 질문은 다음과 같습니다
-
단어 사이에 하나 이상의 공백의
- 해야 순서는 텍스트를 포장하기위한 목적으로 하나의 공백으로 "붕괴"수, 또는 5 연속 공백의 순서를 계산한다 줄당 10 자까지 5 자로? 여러 개의 공백이 보존되기보다는 접혀지기를 원합니다.
- 한 단어가 10자를 초과하면 어떻게 작동합니까? 10 자보다 큰 줄로 끝내 길 원합니 까? 아니면 그 줄 바꿈이 중간에 들어가도록 강요하고 싶습니까? 10 자 이상의 단어가 10 자 제한을 초과하여 확장되도록하고 싶다고 가정합니다. 마음의 문제에 대한 이러한 가정으로
,이처럼 코드 것이다 :
NSMutableString *resultString = [[NSMutableString alloc] init];
NSMutableString *currentLine = [[NSMutableString alloc] init];
NSScanner *scanner = [NSScanner scannerWithString:sourceString];
NSString *scannedString = nil;
while ([scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString: &scannedString]) {
if ([currentLine length] + [scannedString length] <= 10) {
[currentLine appendFormat:@"%@ ", scannedString];
}
else if ([currentLine length] == 0) { // Newline but next word > 10
[resultString appendFormat:@"%@\n", scannedString];
}
else { // Need to break line and start new one
[resultString appendFormat:@"%@\n", currentLine];
[currentLine setString:[NSString stringWithFormat:@"%@ ", scannedString]];
}
[scanner scanCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL];
}
문자열에 개행 문자를 직접 삽입해야합니다.이 afaik에 내장 함수가 없습니다.
NSMutableString * guid = [NSMutableString stringWithString: @"Some suitably long string will be used for demonstration purposes"];
for(NSUInteger i = 10; i < [guid length] ; i += 10) {
[guid insertString:@"\n" atIndex: i];
}
NSLog(@"GUID: %@", guid);
이 단어 사이에 휴식을 추가하지 않습니다. – nycynik
아, 그 부분의 제목을 놓쳤습니다. – Perception
나는 그런 방식으로 뭔가를 할 거라고 :
NSString *finalString = @"";
NSString *yourString = @"This is your very very long string with many words and letters and spaces, haha";
NSArray *someArray = [yourString componentsSeparatedByString:@" "]; //that will make an array with strings separated by spaces
for (int i = 0; i < [someArray count]; i++) {
NSArray *someArray2 = [finalString componentsSeparatedByString:@"\n"];
if ([[someArray objectAtIndex:i]length] + [[someArray2 lastObject]length] > 9)
finalString = [NSString stringWithFormat:@"%@\n%@", finalString, [someArray objectAtIndex:i]];
else
finalString = [NSString stringWithFormat:@"%@ %@", finalString, [someArray objectAtIndex:i]];
}
나는 그런 일이 일을해야한다고 생각합니다. 나는 근처에 맥이 없기 때문에, 나는 그것을 내 기억으로 썼다. (항상 흠이없는 것은 아니다). 따라서 코드에 몇 가지 오류가있을 수 있습니다.
는
이것은 훌륭하지만 10 자 이상의 단어에는 대소 문자가 없습니다. – nycynik
내가 실제로하지 매 10 개 문자에서 휴식 시간을 않는 무언가를 생성 할 수 있지만, 단어 사이가 아닌 사전을 필요가 더 하이픈 엔진이 없다 바랍니다. 나는 지각 답변에서 그것을 구축했다.
NSMutableString * guid = [NSMutableString stringWithString: @"Some suitably long string will be used for demonstration purposes"];
int lastSpace=0;
int lastbreak=0;
NSUInteger i = [guid length];
while(i > 0) {
if ([guid characterAtIndex:i-1]==' ')
lastSpace=i;
lastbreak++;
if (lastbreak>9) {
if (lastSpace!=0) {
[guid insertString:@"\n" atIndex: lastSpace];
} else {
// we have not found a space in 10 chars, so break where there is no space.
// no H&J engine here, so we can add the - or not.
[guid insertString:@"-\n" atIndex: i];
i++; // since were adding a character, dont skip a character.
}
lastbreak=0;
lastSpace=0;
}
i--;
}
따라 가기 아주 쉽습니다! lastSpace 변수! 왜 그렇게 생각하지 않았습니까?) 감사합니다! –
죄송합니다. 생각했던 것처럼 작동하지 않습니다. 줄에 10 자 이상을 허용합니다. 나는 최대 10 명을 필요로한다. 더 자주 줄 바꿈을해야합니다. –
일부 조정을하면 작업이 시작됩니다 (처음부터 "i"변수를 계산하고 넘어갈 때 다음 단어 대신에 10을 넘을 때 공백 문자로 나누기). 감사합니다! –
이것은 경이로운 일을했습니다! 정말 고맙습니다!!! :) –
나는 이것을 위해 두 배의 upvotes를 줄 수 있었으면 좋겠다.IOS 세계에 새로운 누군가로서,이 글을 쓰려면 하루 종일 걸릴 수도 있었을 것입니다. – Caimen