0

我正在尝试将相当长的字符串的内容拆分为内容页面。现在我按字符(每页 500 个字符)执行此操作,如下所示:

//Lets find out how many pages to make
    int pageLength = 500; //how many characters per page
    NSString *text = ((Story *) [self.story objectAtIndex:chapter]).content;
    int NumberOfPages = (text.length/pageLength);
    //NumberOfPages += 1;

    //Build the Pages Array
    NSMutableArray *pageStrings = [[NSMutableArray alloc] init];
    for (int i = 0; i <= (NumberOfPages+1); i++)
    {
        if (i < NumberOfPages) {
            //Load the text like normal
            NSString *contentString = [[NSString alloc]initWithFormat:@"<html><head><style type=text/css>body {font-family: \"%@\"; font-size: %d;}</style></head><body><p>%@</p></body></htlm>",@"helvetica",20,[text substringWithRange:NSMakeRange(i*pageLength,pageLength)]];
            [pageStrings addObject:contentString];
        }
        if (i == NumberOfPages) {
            //on the last page, only load what's available
            NSString *contentString = [[NSString alloc]initWithFormat:@"<html><head><style type=text/css>body {font-family: \"%@\"; font-size: %d;}</style></head><body><p>%@</p></body></htlm>",@"helvetica",20,[text substringWithRange:NSMakeRange(i*pageLength,(text.length-(i*pageLength)))]];
            [pageStrings addObject:contentString];
        }
        if (i > NumberOfPages){
            //add in a blank page on the end
            NSString *contentString = [[NSString alloc]initWithFormat:@"<html><head><style type=text/css>body {font-family: \"%@\"; font-size: %d;}</style></head><body><p>%@</p></body></htlm>",@"helvetica",20,@"What do you do?"];
            [pageStrings addObject:contentString];
        }
    }
    pageContent = [[NSArray alloc] initWithArray:pageStrings];

这很好用,但通常会导致单词在中间分开。我正试图让它在这个词上分裂。该字符串不必正好是 500 个字符,只要接近它即可。

4

2 回答 2

3

如果你想“正确”地做,你应该看看 NSString 方法:

- (void)enumerateSubstringsInRange:(NSRange)range options:(NSStringEnumerationOptions)opts usingBlock:(void (^)(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop))block

您可以通过单词、行、段落、句子和字符序列智能地枚举文本。

Session 128, WWDC 2011, "Advanced Text Processing" 有一些关于这方面的好信息。

于 2012-08-21T01:00:24.747 回答
0

您可以做的是跟踪最后一个空格或换行符的位置。这样,当你用完空间并且你在一个单词的中间时,你知道你可以结束的最后一个位置不会中断一个单词。然后,您每次都从该位置继续直到您的 500 个限制。这涉及遍历每组 500 个字符。

于 2012-08-21T00:07:14.050 回答