0

内の特定の単語セットを強調表示または下線を付けたいと思いますNSString。単語が存在するかどうかを検出できますが、それらを強調表示することはできません。

NSString * wordString = [NSString stringWithFormat:@"%@", [self.myArray componentsJoinedByString:@"\n"]];

self.myLabel.text = wordString;

if ([wordString rangeOfString:@"Base Mix"].location == NSNotFound)
{
    NSLog(@"string does not contain base mix");
}
else
{
    NSLog(@"string contains base mix!");

    NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:wordString];

    NSString * editedString = [NSString stringWithFormat:@"%lu", (unsigned long)[wordString rangeOfString:@"Base Mix"].location];

    NSRange theRange = NSMakeRange(0, [editedString length]);

    [string beginEditing];
    [string removeAttribute:NSForegroundColorAttributeName range:theRange];
    [string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:theRange];
    [string endEditing];

    [self.myLabel setAttributedText:string];
}

このコードは正しい道に近いです。強調表示された文字が表示されますが、それは文字列の最初の文字であり、検索した単語ではありません。

4

5 に答える 5

5

NSUnderlineStyleAttributeNameおよびNSUnderlineColorAttributeName属性を使用できます。次のように使用できると思います。

NSRange foundRange = [wordString rangeOfString:@"Base Mix"];
if (foundRange.location != NSNotFound)
{
    [wordString beginEditing];
    [wordString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:1] range:foundRange];
    [wordString addAttribute:NSUnderlineColorAttributeName value:[NSColor redColor] range:foundRange];
    [wordString endEditing];
}
于 2014-01-28T05:35:29.133 に答える
2

NSAttributed 文字列に関連する以下のコードを使用できます。iOS6以降のみ動作します

NSString *tem = @"String with base Mix dfsdfsd ";
 NSString *substring = @"base Mix";
 NSRange range;
 if ((range =[tem rangeOfString:substring]).location == NSNotFound)
 {
       NSLog(@"string does not contain base mix");
 }
 else
 {
       NSMutableAttributedString *temString=[[NSMutableAttributedString alloc]initWithString:tem];
       [temString addAttribute:NSUnderlineStyleAttributeName
                                  value:[NSNumber numberWithInt:1]
                                  range:(NSRange){range.location,substring.length}];
        NSLog(@"%@",temString);
       self.yourLabel.attributedText = temString;
 }     
于 2014-01-28T05:41:58.407 に答える
0

NSAttributedString からその部分が抜けていると思います。Three20で試すことができます

于 2014-01-28T05:27:12.467 に答える