我有一个程序,我可以从Twitter获取推文并在UITableviewcell
中显示。现在的问题是,我必须使所有推特名称大胆和bule并在原始推文中用bule和粗体名称显示它们。
例如,我有这样的推文
MT @OraTV
:SNEAK PEEK:@tomgreenlive @TheoVon & @DavidBegnaud
在Miley的#twerking #Batfleck &more
上谈论
所以所有名称都以@ should be bold and bule.
我使用此代码提取以@开头的所有名称,但不知道如何加粗和显示 他们在单个uitableviewcell
NSString * aString =twitterMessage
NSMutableArray *substrings = [NSMutableArray new];
NSScanner *scanner = [NSScanner scannerWithString:aString];
[scanner scanUpToString:@"@" intoString:nil];
while(![scanner isAtEnd]) {
NSString *substring = nil;
[scanner scanString:@"@" intoString:nil];
if([scanner scanUpToString:@" " intoString:&substring]) {
[substrings addObject:substring];
}
[scanner scanUpToString:@"@" intoString:nil];
}
答案 0 :(得分:0)
所以你已经正确提取了所有名字?如果是这样,似乎NSAttributedString就是你想要的。更多信息 here。
这样的事情:[str setTextColor:[UIColor blueColor] range:NSMakeRange(0,5)];
对于粗体文本,请使用[UIFont boldSystemFontOfSize:fontSize]
。请参阅上面第二个链接中的示例。
答案 1 :(得分:0)
你必须通过在2种字体和颜色之间滑动来构建NSAttributedString。
如果你能够检测到它们,你应该用一个已知的标记(例如:@aName)来替换你的名字。然后,解析字符串以构建NSAttributedString。
您可以使用此代码(未经测试,您可能需要调整):
// String to parse
NSString *markup = @"MT <color>@OraTV</color>: SNEAK PEEK: <color>@tomgreenlive</color>...";
// Names font and color
UIFont *boldFont = [UIFont boldSystemFontOfSize:15.0f];
UIColor *boldColor = [UIColor blueColor];
// Other text font and color
UIFont *stdFont = [UIFont systemFontOfSize:15.0f];
UIColor *stdColor = [UIColor blackColor];
// Current font and color
UIFont *currentFont = stdFont;
UIColor *currentColor = stdColor;
// Parse HTML string
NSMutableAttributedString *aString = [[NSMutableAttributedString alloc] initWithString:@""];
NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:@"(.*?)(<[^>]+>|\\Z)"
options:NSRegularExpressionCaseInsensitive|NSRegularExpressionDotMatchesLineSeparators
error:nil];
NSArray *chunks = [regex matchesInString:markup options:0 range:NSMakeRange(0, [markup length])];
for (NSTextCheckingResult* b in chunks)
{
NSArray *parts = [[markup substringWithRange:b.range] componentsSeparatedByString:@"<"];
NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:currentFont,NSFontAttributeName,currentColor,NSForegroundColorAttributeName,nil];
[aString appendAttributedString:[[NSAttributedString alloc] initWithString:[parts objectAtIndex:0] attributes:attrs]];
if([parts count] > 1)
{
NSString *tag = (NSString *)[parts objectAtIndex:1];
if([tag hasPrefix:@"color"])
{
currentFont = boldFont;
currentColor = boldColor;
}
else if([tag hasPrefix:@"/color"])
{
currentFont = stdFont;
currentColor = stdColor;
}
}
}
希望有所帮助。
西里尔