【问题标题】:Detect carriage return in UITextField检测 UITextField 中的回车
【发布时间】:2013-05-23 12:00:56
【问题描述】:

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

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

【问题讨论】:

  • 谢谢,但我不确定这是否是我需要的。我想知道文本字段中有多少返回,以便我可以计算 pdf 所需的框架大小。这是在完成所有文本字段后完成的,而不是在按下返回键时完成。
  • 您想知道字符串中换行符的数量吗?这很容易,但可能无法可靠地说明您的框架需要多大,因为长线可能会缠绕。您如何创建 PDF 文件?我原以为你会在 API 中寻找一些东西来告诉你给定文本需要多大的框。
  • @Rob - 我不那么匆忙。你是对的...... UITextViews 谢谢
  • @SteveWaddicor 使用的方法非常适用于纯文本,但每当引入新行时就会被抛出。所以是的,我想知道一个字符串中有多少新行。我正在使用一系列 CGContextRef 调用创建 pdf。
  • 计算用户按回车键的次数很容易,但是如果用户输入了很长的换行行怎么办?这需要多行,但用户没有按回车键。解决方案取决于您如何呈现文本。与CGContextShowText?还是你在使用 UIKit 控件?

标签: ipad pdf ios6 uitextfield


【解决方案1】:

我原以为真正的问题不是字符串中有多少换行符,而是呈现文本需要多少空间(不仅包括用户按 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;
}

【讨论】:

  • 感谢您的帮助。史蒂夫的回复正是我所需要的,尽管如此使用它。
【解决方案2】:

应该这样做。

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

【讨论】:

  • 完美而简单。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 2011-05-24
  • 2015-07-16
  • 2013-03-07
  • 2015-06-12
  • 2011-01-26
相关资源
最近更新 更多