orgText
とsearchLetter
の2つのNSStringがあります。orgText
内のsearchLetterのすべての出現箇所を赤い色で強調表示したいと思います。NSRange
のすべてのオカレンスのsearchLetter
を取得するにはどうすればよいですか?
例:
suppose: orgText = "abcahaiapaoiuiapplma"
searchLetter = "a".
「abcahaiapaoiuiapplma」のすべての「a」の出現を赤い色で強調したいと思います。
ありがとう。
私は自分のプロジェクトのためにこのメソッドを書きました- ハイライト付きのSUITextView :
- (NSMutableAttributedString*) setColor:(UIColor*)color Word:(NSString*)Word inText:(NSMutableAttributedString*)mutableAttributedString {
NSUInteger count = 0, length = [mutableAttributedString length];
NSRange range = NSMakeRange(0, length);
while(range.location != NSNotFound)
{
range = [[mutableAttributedString string] rangeOfString:Word options:0 range:range];
if(range.location != NSNotFound) {
[mutableAttributedString setTextColor:color range:NSMakeRange(range.location, [Word length])];
range = NSMakeRange(range.location + range.length, length - (range.location + range.length));
count++;
}
}
return mutableAttributedString;
}
そして、NSMutableAttributedStringの私のカテゴリでは:
- (void) setTextColor:(UIColor*)color range:(NSRange)range {
// kCTForegroundColorAttributeName
[self removeAttribute:(NSString*)kCTForegroundColorAttributeName range:range]; // Work around for Apple leak
[self addAttribute:(NSString*)kCTForegroundColorAttributeName value:(id)color.CGColor range:range];
}
正規表現の解決策が見当たらないので、エレガントなものを作成しました。将来誰かに役立つかもしれません。
- (BOOL)highlightString:(NSString *)string inText:(NSMutableAttributedString *)attributedString withColour:(UIColor *)color {
NSError *_error;
NSRegularExpression *_regexp = [NSRegularExpression regularExpressionWithPattern:string options:NSRegularExpressionCaseInsensitive error:&_error];
if (_error == nil) {
[_regexp enumerateMatchesInString:attributedString.string options:NSMatchingReportProgress range:NSMakeRange(0, attributedString.string.length) usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
if (result.numberOfRanges > 0) {
for (int i = 0; i < result.numberOfRanges; i++) {
[attributedString addAttribute:NSBackgroundColorAttributeName value:color range:[result rangeAtIndex:i]];
}
}
}];
return TRUE;
} else {
return FALSE;
}
}
MutableAttributeStringの「setTextColor」でコードがクラッシュする
代わりに以下のコードを使用してください
NSDictionary *tempdict=[NSDictionary dictionaryWithObjectsAndKeys:[UIFont boldSystemFontOfSize:12.0],NSFontAttributeName,color,NSForegroundColorAttributeName, nil];
[mutableAttributedString setAttributes:tempdict range:NSMakeRange(range.location, [Word length])];