2012-03-12 28 views
6

多次发生我想使用的东西大胆地做出多次出现在一个属性串像下面关于AttributeString - 做大胆

[attrStr setFont:[UIFont ...] range:[attrStr.string rangeOfString:@"hello world"]]; 

如你所知,“rangeOfString”随时返回本场比赛的第一次出现。 ..我还是相当新的iOS,只是想知道什么是最好的方式来设置所有事件的大胆......是否有任何提供的NSString或什么功能?

在此先感谢!

+0

原始海报对结果没有反应。 – wuf810 2013-04-17 13:58:49

回答

22

您应该先尝试获取字符串中的所有范围,然后为每个范围设置属性。有一些伟大的代码示例就在这里计算器:https://stackoverflow.com/a/4653266/381870

编辑:

下面是一个例子,你

- (NSArray *)rangesOfString:(NSString *)searchString inString:(NSString *)str { 
    NSMutableArray *results = [NSMutableArray array]; 
    NSRange searchRange = NSMakeRange(0, [str length]); 
    NSRange range; 
    while ((range = [str rangeOfString:searchString options:0 range:searchRange]).location != NSNotFound) { 
     [results addObject:[NSValue valueWithRange:range]]; 
     searchRange = NSMakeRange(NSMaxRange(range), [str length] - NSMaxRange(range)); 
    } 
    return results; 
} 

用法:

NSArray *results = [self rangesOfString:@"foo" inString:@"foo bar foo"]; 
NSLog(@"%@", results); 

给你

(
    "NSRange: {0, 3}", 
    "NSRange: {8, 3}" 
) 
+0

谢谢。超级真棒代码(y) – ishhhh 2014-08-28 06:45:42

+0

精彩的回答..保存我的一天 – 2016-11-18 09:09:01

0

您将不得不使用NSScanner扫描文本并将其替换。您可以找到NSScanner here的示例。

+0

感谢@Vignesh的信息。我会看看这个选项......我选择了上面的解决方案,因为它与我当前的代码库更加一致。 :) – Koolala 2012-03-13 00:52:47