我需要让NSString中的某些单词可以点击,并且像标签一样使用不同的字体样式。
我有一个像这样的代码:
NSString *str = @"This is my string and it is #cool and #fun. Please click on the tags.";
所以上面的单词#cool和#fun将成为uibutton动作的按钮。在函数中,我会将酷或乐趣传递给新的UIViewController。
谢谢!
答案 0 :(得分:3)
这是一段代码段
NSMutableAttributedString * str = [[NSMutableAttributedString alloc] initWithString:@"Google"];
[str addAttribute: NSLinkAttributeName value: @"http://www.google.com" range: NSMakeRange(0,str.length)];
[str addAttribute:kCTFontAttributeName value: boldFontName range: NSMakeRange(0,str.length)];
yourTextField.attributedText = str;
修改的
对于像这样的字符串,实现与UIButton
操作类似的方法最接近的方法是首先使用UITextView
方法在firstRectForRange:
中找到所选范围的矩形,并且然后将实际的不可见UIButton
与连接的动作重叠。
答案 1 :(得分:3)
这需要是NSAttributedString,而不是NSString。 NSAttributedString允许您将样式运行应用于文本的一部分。这样的样式运行可以包含可点击的链接。
您可以使用NSFontAttributeName
属性将字体更改为粗体变体,并且可以添加带有NSLinkAttributeName
属性的链接。
答案 2 :(得分:3)
请参阅以下示例代码: -
NSString *str = @"This is my string and it is #cool and #fun. Please click on the tags.";
NSMutableAttributedString *yourAtt=[[NSMutableAttributedString alloc]init];
for (NSString *word in [str componentsSeparatedByString:@" "])
{
if ([word isEqualToString:@"#cool"] || [word isEqualToString:@"#fun."])
{
[yourAtt appendAttributedString:[[NSAttributedString alloc]initWithString:word attributes:@{NSLinkAttributeName:@"http://www.google.com"}]];
}
else
{
[yourAtt appendAttributedString:[[NSAttributedString alloc]initWithString:word attributes:@{NSFontAttributeName:[NSFont boldSystemFontOfSize:12]}]];
}
[yourAtt appendAttributedString:[[NSAttributedString alloc]initWithString:@" "]];
}
self.yourAttStr=yourAtt;
输出是两个单词#cool,现在可以点击#fun,其余字体以粗体显示: -