iOS 7文本工具包:NSLayoutManager何时填充了最后一个NSTextContainer?

iOS 7文本工具包:NSLayoutManager何时填充了最后一个NSTextContainer?,ios,ios7,uipageviewcontroller,textkit,Ios,Ios7,Uipageviewcontroller,Textkit,我将文本工具包与UIPageViewController结合使用来创建一本书。原始文本存储在文本文件(.html)中,并放入NSTEXT存储器中 [NSLayoutManager addTextContainer:(NSTextContaner*)txt]方法工作得很好,但是无法知道NSLayoutManager何时填充了最后一个NSTextContainer-即使在显示了所有下一个NSTextContainer之后,它也会继续返回NSTextContainer。因此,在完成NSLayoutMa

我将文本工具包与UIPageViewController结合使用来创建一本书。原始文本存储在文本文件(.html)中,并放入NSTEXT存储器中

[NSLayoutManager addTextContainer:(NSTextContaner*)txt]方法工作得很好,但是无法知道NSLayoutManager何时填充了最后一个NSTextContainer-即使在显示了所有下一个NSTextContainer之后,它也会继续返回NSTextContainer。因此,在完成NSLayoutManager后,您将获得一个所有银行页面的列表

我尝试使用[NSLayoutManagerDelegate didCompleteLayoutPortExtContainer:atEnd:]回调方法,但它无法正常工作。填充每个NSTextContainer后,它返回atEnd flag=YES,而不仅仅是填充最后一个NSTextContainer时。我已经设置了UITextView.scrollable=NO(建议在别处使用),但这没有帮助

我还尝试在未显示文本时调用UITextView.text来检查文本,但该方法始终返回位于NSTextContainer/NSLayoutManager后面的整个NSTextStorage的内容


如果我不知道最后一个容器是什么时候装满的,我就不知道所有的页面是什么时候排好的。是否有方法测试UITextView以查看其是否为空或NSContainer,或NSLayoutManager以查看是否已完成文本布局?

我始终无法正确调用回调方法-我认为这是一个错误-但我找到了一种方法来检查下一个容器是否为空

    [_layoutManager addTextContainer:textContainer];
    NSRange range = [_layoutManager glyphRangeForTextContainer:textContainer];
    if (range.length == 0) {
        return nil;// top adding container because this last one is empty
    }

通过调用glyphRangeForTextContainer方法检查容器是否为最后一个。如果超过标志符号数,则为最后一个容器

layoutManager.addTextContainer(container)

let glyphRange = NSMaxRange((layoutManager.glyphRangeForTextContainer(container)))
if glyphRange >= layoutManager.numberOfGlyphs {
    // last container
}