微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SWIFT iOS - 从多行 uitextview 中获取带有换行符的文本,因为它们在屏幕上可见

如何解决SWIFT iOS - 从多行 uitextview 中获取带有换行符的文本,因为它们在屏幕上可见

我有一个多行 UITextView,有时文本会换行几行。我想从中获取文本,并从 iphone 屏幕上可见内容换行。

这很有用,因为我有一个 UITextView 可以随 UI 更改字体大小,并且我想在用户在屏幕上看到文本时捕获文本。

使用 textview.text 从 UITextView 获取文本不包含这些。 (尽管它确实包含用户通过按键盘上的“返回”键输入的任何换行符。)

我想也许您需要测量 UITextView 的高度并检查每个字符,但我不知道该怎么做。我还希望它与表情符号一起使用。

解决方法

看来你是想获取UITextView的快照而不是获取textview.text,所以你需要学习如何将UITextView的内容绘制成图片。

有关如何绘制UIView的快照,请尝试this

有关如何绘制NSAttribeString的快照,请尝试draw(with:options:context:)

,

Core TextTextKit 是处理文本的最佳选择。

这个答案显示了如何使用核心文本获取自动换行:https://stackoverflow.com/a/13588322/1837959

或者您可以访问 layoutManagerUITextView (NSLayoutManager) 以访问布局数据。

,

听起来像一个hacky的解决方案,但实际上并非如此:

使用 Vision Framework's text recognition 将图像转换为文本。

  1. 将视图转换为图像
extension UIView {
    var toImage: UIImage?  {
        let renderer = UIGraphicsImageRenderer(bounds: self.bounds)
        return renderer.image { (context) in
            self.layer.render(in: context.cgContext)
        }
    }
}
let yourTextView = UITextView()
let img = yourTextView.toImage()
  1. Follow article
guard let cgimg = img.cgImage else {return}

// Create a new image-request handler.
let requestHandler = VNImageRequestHandler(cgImage: cgImage)

// Create a new request to recognize text.
let request = VNRecognizeTextRequest(completion: recognizeTextHandler)

do {
    // Perform the text-recognition request.
    try requestHandler.perform([request])
} catch {
    print("Unable to perform the requests: \(error).")
}
// Process the Results
func recognizeTextHandler(request: VNRequest,error: Error?) {
    guard let observations =
            request.results as? [VNRecognizedTextObservation] else {
        return
    }
    let recognizedStrings = observations.compactMap { observation in
        // Return the string of the top VNRecognizedText instance.
        return observation.topCandidates(1).first?.string
    }
    
    // Use the result
    processResults(recognizedStrings)
}
,

UITextView 文本将显示 '\n' 以供用户输入(当他按下 Enter 键时)。 如果用户不按回车键/返回并继续写入,则会根据 UITextView 的大小/宽度进行自动换行。所以你不应该什么。所以如果你看到“\n” 只需将其更改为
,如果您在网站中显示它或使用 Web 视图 html 布局。或者只需用空格替换所有 "\n" 并且不要包装它,让视图的宽度决定如何包装它。 IOS iPhone 的屏幕截图并以同样的方式显示看起来更奇怪。

例如。

认为是

数据偶数

没有

返回。 它应该在一行中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。