Objective-c每10个字符换行(保持单词)

Alb*_*haw 3 objective-c line-breaks word-wrap charactercount ios

如果我有一个字符串,我将加载到TextField我怎么能断行\n每10个字符(包括空格和诸如此类)出现但是没有转到下一行中间的单词...喜欢换行最多10个字符?但我不只是在UITextField中包装我实际上需要输入\n因为它将被用于其他东西......(这适用于iOS,如果这很重要)任何帮助都表示赞赏我真的被卡住了!

Tim*_*ean 5

你可能想在一个循环中使用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];
}
Run Code Online (Sandbox Code Playgroud)