Получить текст в 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];
}