我想强调或强调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];
}
此代码更接近正确的路径。我确实看到一个突出显示的字符,但它是字符串中的第一个字符,而不是我搜索过的字符。
答案 0 :(得分: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];
}
答案 1 :(得分: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;
}
答案 2 :(得分:0)
我认为NSAttributedString缺少该部分。您可以尝试使用Three20
答案 3 :(得分:0)
在@ user1118321的答案的帮助下我写了这个函数,我会节省一些时间
func highlightedString(allText:String,toBeHighlighted word:String) -> NSAttributedString{
var putInString = NSMutableAttributedString.init()
var giveFrom = NSMutableString.init(string: allText)
while true {
let range = giveFrom.range(of: word)
let index = range.location + range.length
if range.location == NSNotFound{
putInString.append(NSAttributedString.init(string: giveFrom as String))
break
}
else{
let slite = giveFrom.substring(to: index)
let highlightedSlite = NSMutableAttributedString.init(string: slite)
highlightedSlite.addAttributes([NSAttributedStringKey.backgroundColor : UIColor.yellow], range: range)
giveFrom = giveFrom.substring(from: index) as! NSMutableString
putInString.append(highlightedSlite)
}
}
return putInString
}
可能代码不是很清楚,所以我欢迎任何编辑都有帮助
突出显示许多字词
func higlighted(allText:String,words:[String]) ->NSAttributedString{
let allAttributedText = NSMutableAttributedString.init(string: allText)
var ranges = [NSRange]()
for word in words{
var string = allAttributedText.string as NSString
var i = 0
while true {
var range = string.range(of: word)
if range.location == NSNotFound {
break
}
i = i + range.location + word.count
string = string.substring(from: range.location + range.length) as NSString
range.location = i - word.count
print("\(range) XX \(word)" )
ranges.append(range)
}
}
for range in ranges{
allAttributedText.addAttributes([NSAttributedStringKey.backgroundColor : UIColor.yellow], range: range)
}
return allAttributedText
}
答案 4 :(得分:0)
您可以像这样创建NSString
类的类别方法
-(NSMutableAttributedString*)addAttributesToWords:(NSString*)string attributes:(NSArray*)attributes {
NSRange range;
if ((range = [self rangeOfString:string]).location == NSNotFound){
return [[NSMutableAttributedString alloc] initWithString:self];
}
else{
NSMutableAttributedString *result = [[NSMutableAttributedString alloc] initWithString:self];
for (NSDictionary *attribute in attributes) {
[result addAttributes:attribute range:range];
}
return result;
}
}
使用方法:
NSArray *attributes = @[@{NSFontAttributeName : kFont_OpenSansSemiBold14},
@{NSForegroundColorAttributeName : [UIColor darkGrayColor]}];
self.label.attributedText = [@"Hello There, this is a Test" addAttributesToWords:@"Hello There" attributes:attributes];