Получить текст в NSTextContainer

У меня есть NSOrderedSet параграфов с содержанием NSString. Зацикливаясь на всем, большая строка создается и получает NSTextStorage. Но с этим все пункты потеряны.

Приведенный ниже код позволяет мне считать страницы и представлять контент на страницах. Но я хотел бы разделить содержимое в абзацах и знать, когда пользователь нажимает на определенный абзац.

Как я могу использовать NSTextStorage, чтобы отображать содержимое не как одну большую строку, а как набор небольших текстовых блоков? Примечание. Я использую UIPageViewController для отображения содержимого, поэтому мне также необходимо знать количество абзацев на странице.

NSString *content = @"";
for (TWParagraph *paragraph in self.bookParagraphs)
{
    TWTextBlock *textBlock = paragraph.hasTextBlock.firstObject;
    content = [content stringByAppendingString:textBlock.textContent];
}

NSTextStorage *localTextStorage = [[NSTextStorage alloc] initWithString:content];
NSLayoutManager *localLayoutManager = [NSLayoutManager new];
NSTextContainer *localTextContainer = [self createTextContainer];
localLayoutManager.delegate = self;
[localTextStorage addLayoutManager:localLayoutManager];
[localLayoutManager addTextContainer:localTextContainer];

[localLayoutManager ensureLayoutForTextContainer:localTextContainer];


self.numberOfPages = [[localLayoutManager textContainers] count];

Благодарю.

1 ответ

Я не мог найти решение, используя NSTextContainer. В конце концов, я решил эту проблему, разбив текст на ячейки в UITableView.

Высота каждой ячейки рассчитывается на основе объема текста, который она должна содержать.

- (CGRect) calculateRectSize: (TWTextBlock *) textBlock forAttributes:(NSDictionary *) customAttributes {
    CGSize constraintSize = CGSizeMake(self.tableViewRect.size.width - 10.0f, 400);
    return [[textBlock textContent] boundingRectWithSize:constraintSize options:NSStringDrawingUsesLineFragmentOrigin attributes:customAttributes context:nil];
}
Другие вопросы по тегам