在 iOS 中使用带有文本容器的文本存储时,UITextView 变得不可选择

问题描述 投票:0回答:2

我正在尝试将

NSAttributedString
显示为
UITextView
。我用过
NSTextStorage
NSLayoutManager
NSTextContainer
。但发生的情况是
UITextView
变得无法选择。当我尝试选择时,我找不到任何选择或复制粘贴选项。

我已经给了

textview.selectable=YES

我使用了具有相同文本存储的多个文本视图。这就是这个问题的原因吗?或者我必须启用其他功能吗???

ios ios7 uitextview nstextstorage nstextcontainer
2个回答
0
投票

我自己解决了这个问题!!!

我相信当我们使用相同的存储和不同的 UITextView 时,这是问题所在。将内容分割到不同的文本视图。我没有找到任何解决方案。

我通过省略存储、容器和布局管理器并通过其他方式实现相同的功能来解决这个问题。


0
投票

我的解决方案受到这个问题的启发。

// 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
© www.soinside.com 2019 - 2024. All rights reserved.