2014-01-29 3 views
0

Я использую Text Kit в сочетании с UIPageViewController для создания книги. Исходный текст сохраняется в текстовом файле (.html) и помещается в NSTextStorage.iOS 7 Text Kit: Когда NSLayoutManager заполнил свой последний NSTextContainer?

Метод [NSLayoutManager addTextContainer: (NSTextContaner *) txt] отлично работает, но нет никакого способа узнать, когда NSLayoutManager заполнил последний NSTextContainer - он просто продолжает возвращать NSTextContainer даже после отображения всего следующего. В результате вы получаете все банковские страницы после выполнения NSLayoutManager.

Я попытался использовать метод обратного вызова [NSLayoutManagerDelegate didCompleteLayoutForTextContainer: atEnd:], но он не работает должным образом. Он возвращает флаг atEnd = YES после заполнения каждого NSTextContainer, а не только когда заполняется последний NSTextContainer. Я установил UITextView.scrollable = NO (предлагается в другом месте), но это не помогает.

Я также попытался проверить текст, вызвав UITextView.text, когда текст не отображается, но этот метод всегда возвращает содержимое всего NSTextStorage, которое лежит за NSTextContainer/NSLayoutManager.

Если я не могу сказать, когда заполнен последний контейнер, я не знаю, когда будут выложены все страницы. Есть ли способ проверить UITextView, чтобы увидеть, если его пустой или NSContainer, или NSLayoutManager, чтобы увидеть выполненный текст?

+0

Я закончил использовать – RMH

ответ

0

Я никогда не был в состоянии получить обратно вызова метода можно назвать правильно - я думаю, что его ошибка - но я нашел способ, чтобы проверить, если следующий контейнер будет пустым или нет ..

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

Проверьте, последний контейнер, вызвав метод glyphRangeForTextContainer. Если он превышает количество глифов, это последний контейнер.

layoutManager.addTextContainer(container) 

let glyphRange = NSMaxRange((layoutManager.glyphRangeForTextContainer(container))) 
if glyphRange >= layoutManager.numberOfGlyphs { 
    // last container 
} 
Смежные вопросы