簡體   English   中英

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

[英]iOS 7 Text Kit: When has NSLayoutManager filled its last NSTextContainer?

我將Text Kit與UIPageViewController結合使用來創建一本書。 原始文本存儲在文本文件(.html)中,並放置在NSTextStorage中。

[NSLayoutManager addTextContainer:(NSTextContaner *)txt]方法效果很好,但是沒有辦法知道NSLayoutManager何時填充了最后一個NSTextContainer-即使顯示所有下一個,它也只會返回NSTextContainer。 結果,完成NSLayoutManager后,您將獲得所有庫頁面。

我試過使用[NSLayoutManagerDelegate didCompleteLayoutForTextContainer:atEnd:]回調方法,但無法正常工作。 填充每個NSTextContainer之后,它不僅返回最后一個NSTextContainer填充時間,還返回atEnd標志= YES。 我設置了UITextView.scrollable = NO(在其他地方建議),但這沒有幫助。

我也嘗試通過在沒有文本顯示時調用UITextView.text來檢查文本,但是該方法始終返回位於NSTextContainer / NSLayoutManager后面的整個NSTextStorage的內容。

如果我不知道何時填充了最后一個容器,則不知道何時布置了所有頁面。 有沒有一種方法可以測試UITextView來查看其是否為空或NSContainer或NSLayoutManager來查看完成的文本布局?

我一直無法正確調用call方法-我認為這是一個錯誤-但我找到了一種檢查下一個容器是否為空的方法。

    [_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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM