2012-02-28 5 views
3

TextField로로드 할 문자열이있는 경우 어떻게하면 줄 바꿈을 \ n 10 개 문자 (공백 및 띄어쓰기 포함) 하지만 다음 줄 중간 단어로 이동하지 마십시오 ... 최대 10 자로 텍스트를 감싸는 것처럼? 하지만 UITextField로 래핑하는 것이 아닙니다. 입력 한 내용이 다른 것에서도 사용될 것이기 때문에 실제로 입력해야합니다. (이것이 중요하다면 iOS를위한 것입니다.) 어떤 도움도 감사 할 것입니다. 정말 붙어 있습니다!Objective-c 줄 바꿈 문자 10 개 (줄 바꿈)

답변

4
당신이 함께 이런 종류의를 넣어,하지만 당신은 당신이 그것을 작동하는 방법을 정확히 명확히해야 할 것입니다 정확한 알고리즘을 알아 내기 위해 루프에서 NSScanner의 사용을 할 수 있습니다

. 여기에 대답해야합니다 질문은 다음과 같습니다

    단어 사이에 하나 이상의 공백의
  1. 해야 순서는 텍스트를 포장하기위한 목적으로 하나의 공백으로 "붕괴"수, 또는 5 연속 공백의 순서를 계산한다 줄당 10 자까지 5 자로? 여러 개의 공백이 보존되기보다는 접혀지기를 원합니다.
  2. 한 단어가 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]; 
} 
+0

이것은 경이로운 일을했습니다! 정말 고맙습니다!!! :) –

+0

나는 이것을 위해 두 배의 upvotes를 줄 수 있었으면 좋겠다.IOS 세계에 새로운 누군가로서,이 글을 쓰려면 하루 종일 걸릴 수도 있었을 것입니다. – Caimen

0

문자열에 개행 문자를 직접 삽입해야합니다.이 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); 
+0

이 단어 사이에 휴식을 추가하지 않습니다. – nycynik

+0

아, 그 부분의 제목을 놓쳤습니다. – Perception

1

나는 그런 방식으로 뭔가를 할 거라고 :

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]]; 
} 

나는 그런 일이 일을해야한다고 생각합니다. 나는 근처에 맥이 없기 때문에, 나는 그것을 내 기억으로 썼다. (항상 흠이없는 것은 아니다). 따라서 코드에 몇 가지 오류가있을 수 있습니다.

+0

이것은 훌륭하지만 10 자 이상의 단어에는 대소 문자가 없습니다. – nycynik

2

내가 실제로하지 매 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--; 
} 
+0

따라 가기 아주 쉽습니다! lastSpace 변수! 왜 그렇게 생각하지 않았습니까?) 감사합니다! –

+0

죄송합니다. 생각했던 것처럼 작동하지 않습니다. 줄에 10 자 이상을 허용합니다. 나는 최대 10 명을 필요로한다. 더 자주 줄 바꿈을해야합니다. –

+0

일부 조정을하면 작업이 시작됩니다 (처음부터 "i"변수를 계산하고 넘어갈 때 다음 단어 대신에 10을 넘을 때 공백 문자로 나누기). 감사합니다! –