標籤:style io ar os sp for on div bs
社交化越來為社會所接受,在做社會化產品時,在回複或者轉寄時會@他人 展示出來,點擊@user 跳轉到該使用者的介紹頁面,這裡首先要制定恰當的標籤,比如:<at href=\"jecky://profile/239\">iJecky</at>,然後用戶端拿到文本時,要用到NSRegularExpression分割string,下面以富文本OHAttributedLabel來示範:
說明:本文中用到的contentLabel為OHAttributedLabel類型
樣本:
NSString *atstring = @"測試啊測試啊 <at href=\"jecky://profile/239\">iJecky</at> 測試啊測試啊";
首先分割:
NSMutableString *resultStr = [NSMutableStringstringWithCapacity:0];
NSString *pattern =@"<at href=\"(.*?)\">(.*?)</at>";
NSRegularExpression *regex = [NSRegularExpressionregularExpressionWithPattern:patternoptions:0error:nil];
NSArray *matches = [regexmatchesInString:atstringoptions:0range:NSMakeRange(0,atstring.length)];
NSUInteger lastIdx =0;
for (NSTextCheckingResult* matchin matches)
{
NSRange range = match.range;
if (range.location > lastIdx)
{
NSString *temp = [atstringsubstringWithRange:NSMakeRange(lastIdx, range.location - lastIdx)];
[resultStr appendString:temp];
}
NSString *link = [atstringsubstringWithRange:[match rangeAtIndex:1]];
NSString *text = [atstring substringWithRange:[matchrangeAtIndex:2]];
NSString *atName = [NSStringstringWithFormat:@"@%@",text];
[resultStr appendString:atName];
[markDic setObject:linkforKey:atName];
lastIdx = range.location + range.length;
}
if (lastIdx <atstring.length)
{
NSString *temp = [atstringsubstringFromIndex:lastIdx];
[resultStr appendString:temp];
}
self.contentLabel.text = resultStr;
然後展示到contentLabel上
NSRegularExpression* userRegex = [NSRegularExpressionregularExpressionWithPattern:@"\\[email protected]\\w+"options:0error:nil];
NSMutableAttributedString* mas = [self.contentLabel.attributedTextmutableCopy];
[userRegex enumerateMatchesInString:self.contentLabel.textoptions:0
range:NSMakeRange(0,self.contentLabel.text.length)
usingBlock:^(NSTextCheckingResult *match,NSMatchingFlags flags, BOOL *stop){
NSString *auser = [self.contentLabel.textsubstringWithRange:match.range];
NSString *atlink = [markDicobjectForKey:auser];
if (atlink) {
[mas setLink:[NSURLURLWithString:[markDic objectForKey:auser]]range:match.range];// add it
}
}];
OHParagraphStyle* para = [OHParagraphStyledefaultParagraphStyle];
para.firstLineHeadIndent =0;
para.headIndent =5;
para.tailIndent = -5;
para.textAlignment =kCTTextAlignmentLeft;
[mas setParagraphStyle:para];
[OHASBasicMarkupParserprocessMarkupInAttributedString:mas];
self.contentLabel.attributedText = mas;
iOS之— NSRegularExpression正則分割字串