【问题标题】:How to select the range of text from UIVIew in iOS?如何从 iOS 中的 UIVIew 中选择文本范围?
【发布时间】:2016-06-15 04:26:10
【问题描述】:

正在自定义 UIVIew 中填充 pdf。现在我希望启用从屏幕上选择文本。如果它是 Webview ,单击会自动给我一个选择范围以及 Edit Menu (本机 iOS 行为)。如何以编程方式做到这一点?提前谢谢..

【问题讨论】:

  • 您能提供更多信息吗?你如何呈现文本?如果没有适当的信息,几乎不可能回答。
  • 感谢您的评论..我在下面提到了Draw Rect的代码..

标签: ios objective-c pdf uiview


【解决方案1】:

您可能想研究使用 Quartz 2D,而不是使用 UIView CGPDFDocumentRef 并将 [CGPDFDictionary][2] 解析为 strings of interest

一旦您知道哪些 PDF 字典元素包含您的文本以及它们所在的位置,您就可以使用 other Quartz 2D routines 突出显示该文本。

另一种选择可能是将您的 PDF 文档转换为 RTF 或 HTML 格式,这两种格式都可能更容易解析和编辑以添加突出显示。

UPD:

关于这个主题的完整教程可以在here找到。

【讨论】:

  • 我目前正在为我的 pdf 使用 CGPDFDocumentRef 对象。如何显示?我必须使用哪个 UI 元素...当前场景是每个页面都在 UIVIew 内部生成,并且这些页面都成为了滚动视图的子视图。这样我就实现了可读性。如果我提取了那个字符串,我该如何显示它?谢谢你的回复。。
  • 我建议您阅读苹果发布的this tutorial。这是一个相当大的话题,所以如果你花一些时间,你会想出一个功能强大的 pdf 工具,它非常灵活,很可能会满足你的要求。
  • 感谢您的链接@Maxim....除此之外,如果还有其他可用的简短教程,请告诉我..再次感谢您..
  • @RathnaKumaran 如果有这方面的教程,我个人会很高兴。我在网上搜索了大约 30 分钟,只有我设法找到的教程是具有最基本内容的教程,例如显示 PDF。文本选择似乎很不受欢迎,大多数教程都避免使用它,因为他们的主要受众不需要它。老实说,一开始我对文档感到害怕,但经过大约 3 年的 iOS 编程后,我意识到如果您想超越平庸的东西并创建非常酷的应用程序,有时文档是最好的选择。
【解决方案2】:

这是我的 UIVIew 子类的 drawRect 代码。我正在从 ViewController 传递“_page”pdf 页面。

- (void)drawRect:(CGRect)rect {
    // Drawing code

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGFloat frameWidth = self.frame.size.width;
    CGFloat frameHeight = self.frame.size.height;

    CGContextSaveGState(context);
    CGContextTranslateCTM(context, 0, frameHeight);
    CGContextScaleCTM(context, 1.0, -1.0);

    CGRect pageRect = CGPDFPageGetBoxRect(_page,
                                          kCGPDFBleedBox);
    CGFloat pageWidth = pageRect.size.width;
    CGFloat pageHeight = pageRect.size.height;
    CGFloat scaleRatio = 1;

    if (pageWidth < pageHeight) {
        scaleRatio = frameHeight / pageHeight;
    } else {
        scaleRatio = frameWidth / pageWidth;
    }

    CGFloat xOffset = (frameWidth - pageWidth
                       * scaleRatio) / 2;
    CGFloat yOffset = (frameHeight - pageHeight
                       * scaleRatio) / 2;

    CGAffineTransform pdfTransform =
    CGPDFPageGetDrawingTransform(
                                 _page, kCGPDFMediaBox,
                                 CGRectMake(xOffset, yOffset, pageWidth,
                                            pageHeight), 0, true);
    CGContextConcatCTM(context, CGAffineTransformScale(
                                                       pdfTransform, scaleRatio, scaleRatio));
    CGContextDrawPDFPage(context, _page);

    CGContextRestoreGState(context);




}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    相关资源
    最近更新 更多