我有一个应用程序,使用户能够在一系列UITextView
s 中输入评论。完成后,应用程序会生成一份 pdf 报告。由于输入的文本长度不同,应用程序需要计算文本在 pdf 上的位置。
我想不通的是如何检测文本中是否包含退货,以便我可以将文本放在 pdf 的下方。我需要在文本全部完成时以及在返回页面时扫描文本,所以当按下键时,这不是可以完成的事情。
我有一个应用程序,使用户能够在一系列UITextView
s 中输入评论。完成后,应用程序会生成一份 pdf 报告。由于输入的文本长度不同,应用程序需要计算文本在 pdf 上的位置。
我想不通的是如何检测文本中是否包含退货,以便我可以将文本放在 pdf 的下方。我需要在文本全部完成时以及在返回页面时扫描文本,所以当按下键时,这不是可以完成的事情。
我原以为真正的问题不是字符串中有多少换行符,而是渲染文本需要多少空间(不仅包括用户按 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;
}
这应该这样做。
NSInteger numberOfLines = [[yourString componentsSeparatedByString:@"\n"] count];