按顺序显示已编辑的NSString

时间:2014-05-05 09:49:51

标签: ios objective-c nsstring nsarray nsattributedstring

在这个伟大的社区的帮助下,我已经在这里工作了几天。

我需要NSArray来编辑NSStrings。我已设法检测字符串中的标记并使其变为粗体。但是现在我试图按照它们在NSArray中的顺序显示字符串,同时保持添加到特定字符串的Bold。

我可以显示单独的粗体字符串'string',但我需要它才能使它在数组中。我知道stringByAppendingString,但这会把它放在最后。

任何方向都会很棒。

for (NSString *testWord in legislationArray) {
            if ([testWord rangeOfString:@"BOLDME"].location != NSNotFound) {

            //Remove Marker
            NSString *stripped = [testWord stringByReplacingOccurrencesOfString:@"BOLDME" withString:@""];

            //Get string and add bold
            NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:stripped];

            NSRange selectedRange = [stripped rangeOfString:(stripped)];

            [string beginEditing];

            [string addAttribute:NSFontAttributeName
                           value:[UIFont fontWithName:@"Helvetica-Bold" size:18.0]
                           range:selectedRange];

            [string endEditing];

            //Where to go now with string?

        }
    }
    cell.dynamicLabel.text = [legislationArray componentsJoinedByString:@"\n"];

修改

基于下面的答案,我得到了它的工作,但粗体方法调用此错误:

enter image description here

2 个答案:

答案 0 :(得分:3)

当您需要componentsJoinedByString时,

NSString会返回NSAttributedString。 此外,您还要将文字设置为等待NSStringcell.dynamicLabel.text)的接收者,其中您想要的内容应为cell.dynamicLabel.attributedText

由于componentsJoinedByString返回不等同于NSAttributedString,因此必须使用for循环执行此操作,从初始化NSMutableAttributedString开始,并向其添加每个组件(您可以"转换")。 Here是一个示例和相关问题。

答案 1 :(得分:1)

只需使用其他数组。将您的代码更改为

NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] init];
for (NSString *testWord in legislationArray) {
    if ([testWord rangeOfString:@"BOLDME"].location != NSNotFound) {

        //Remove Marker
        NSString *stripped = [testWord stringByReplacingOccurrencesOfString:@"BOLDME" withString:@""];

        //Get string and add bold
        NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:stripped];

        NSRange selectedRange = [stripped rangeOfString:(stripped)];

        [string beginEditing];

        [string addAttribute:NSFontAttributeName
                       value:[UIFont fontWithName:@"Helvetica-Bold" size:18.0]
                       range:selectedRange];

        [string endEditing];

        //Where to go now with string?
        [attrString appendAttributedString:string];
    }
    else
    {
        [attrString appendAttributedString:[[NSAttributedString alloc] initWithString:testWord]];
    }
    // NEW LINE
    [attrString appendAttributedString:[[NSAttributedString alloc] initWithString:@"\n"]];
}
cell.dynamicLabel.attributedText = attrString;

更新:

您的其他问题不是错误 - 这是XCode在调试窗口中显示属性字符串的方式: enter image description here