1

我有一个应用程序,使用户能够在一系列UITextViews 中输入评论。完成后,应用程序会生成一份 pdf 报告。由于输入的文本长度不同,应用程序需要计算文本在 pdf 上的位置。

我想不通的是如何检测文本中是否包含退货,以便我可以将文本放在 pdf 的下方。我需要在文本全部完成时以及在返回页面时扫描文本,所以当按下键时,这不是可以完成的事情。

4

2 回答 2

2

我原以为真正的问题不是字符串中有多少换行符,而是渲染文本需要多少空间(不仅包括用户按 Enter 的次数,还包括文本的次数包装,因为它太长而不能放在单行上)。

如果你正在使用类似的东西来绘制文本drawInRect,它会返回一个CGSize告诉你它占用了多少空间,这非常方便。或者,如果您想知道在渲染之前需要多少空间,您可以使用sizeWithFont. 如果您使用 编写文本CGContextShowText,则更复杂。


正如史蒂夫所说,您可以使用这些行创建一个数组componentsSeparatedByString并计算元素的数量。

NSInteger count = [[string componentsSeparatedByString:@"\n"] count];

或者您可以枚举以下行:

- (NSInteger)countLinesInString:(NSString *)string
{
    __block NSInteger count = 0;

    [string enumerateLinesUsingBlock:^(NSString *line, BOOL *stop) {
        count++;
    }];

    return count;
}

或者您实际上可以计算换行符的数量:

- (NSInteger)countOccurrencesOfNewlineInString:(NSString *)string
{
    NSInteger count = 0;

    NSUInteger length = [string length];

    for (NSUInteger i = 0; i < length; i++)
    {
        if ([string characterAtIndex:i] == '\n')
            count++;
    }

    return count;
}
于 2013-05-23T13:02:20.933 回答
1

这应该这样做。

NSInteger numberOfLines = [[yourString componentsSeparatedByString:@"\n"] count];

于 2013-05-23T13:05:53.480 回答