我正在尝试将
NSAttributedString
显示为 UITextView
。我用过NSTextStorage
、NSLayoutManager
和NSTextContainer
。但发生的情况是 UITextView
变得无法选择。当我尝试选择时,我找不到任何选择或复制粘贴选项。
我已经给了
textview.selectable=YES
我使用了具有相同文本存储的多个文本视图。这就是这个问题的原因吗?或者我必须启用其他功能吗???
我自己解决了这个问题!!!
我相信当我们使用相同的存储和不同的 UITextView 时,这是问题所在。将内容分割到不同的文本视图。我没有找到任何解决方案。
我通过省略存储、容器和布局管理器并通过其他方式实现相同的功能来解决这个问题。
我的解决方案受到这个问题的启发。
// Inititialize NSTextStorage
let contents = NSAttributedString(string: "Some attributed string")
let layoutManager = NSLayoutManager()
let textStorage = NSTextStorage(attributedString: contents)
textStorage.addLayoutManager(layoutManager)
// Fill NSTextStorage with content
let pages = 3
let pageSize = view.bounds.size
for _ in 0 ..< pages {
let textContainer = NSTextContainer(size: pageSize)
textContainer.widthTracksTextView = true
textContainer.heightTracksTextView = true
layoutManager.addTextContainer(textContainer)
layoutManager.ensureLayout(for: textContainer)
}
// Get attributed text of the `page` (NSTextContainer)
let pageNumber = 1
let textContainer = layoutManager.textContainers[pageNumber]
let glyphRange = layoutManager.glyphRange(for: textContainer)
let substring = textStorage.attributedSubstring(from: glyphRange)
// Set attributed string to UITextView
let textView = UITextView()
textView.attributedText = substring
// UITextView is selectable and editable
// It can be wrapped with UIPageViewController