【问题标题】:When creating a series of NSTextContainers, how do I specify container breaks based on the text content?在创建一系列 NSTextContainers 时,如何根据文本内容指定容器中断?
【发布时间】:2015-01-15 18:33:18
【问题描述】:

我正在创建一系列 NSTextContainers 来保存 HTML 资源中的文本。我能够将 HTML 添加到属性字符串,将其分配给 NSTextStorage 和 NSLayoutManager,并创建一系列 NSTextContainers 来保存所有文本。

我的问题是,我想在文本中添加“分页符”,即停止填充此文本容器并开始另一个...在文档中,我发现了一些调用 NSControlCharacterContainerBreakAction;但我不清楚如何实现它,或者这是否是最好的方法。

下面的代码 sn-p 是我当前通过文本容器(在 Swift 中)构建的方式。

var myLayoutManager = NSLayoutManager()
var myText:NSAttributedString = {
        let path = NSBundle.mainBundle().URLForResource("localfile", withExtension: "html")
        let opts = [NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType]
        return NSMutableAttributedString(fileURL: path, options: nil, documentAttributes: nil, error: nil)!
        }()

myTextStorage = NSTextStorage(attributedString: myText)
myTextStorage.addLayoutManager(myLayoutManager)

//Create all textContainers to hold text
if myLayoutManager.textContainers.count == 0 {
    var range = NSMakeRange(0, 0)
    while(NSMaxRange(range) < myLayoutManager.numberOfGlyphs) {
        var myTextContainer = NSTextContainer(size: CGSizeMake(450, 580))
        myLayoutManager.addTextContainer(myTextContainer)
        range = myLayoutManager.glyphRangeForTextContainer(myTextContainer)
    }
}

【问题讨论】:

    标签: ios swift textkit


    【解决方案1】:

    你可以在你的字符串中加入“Page Break”ASCII控制字符,布局管理器会处理它。

    let pageBreakString = String(UnicodeScalar(12))
    

    参考:ASCII Control Character

    【讨论】:

      猜你喜欢
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 2023-03-15
      • 1970-01-01
      • 2015-04-26
      • 2020-04-28
      • 2016-02-11
      相关资源
      最近更新 更多