使NSString中的某些单词加粗并像标签一样可单击

时间:2014-12-01 02:47:43

标签: ios objective-c nsstring ios8

我需要让NSString中的某些单词可以点击,并且像标签一样使用不同的字体样式。

我有一个像这样的代码:

NSString *str = @"This is my string and it is #cool and #fun.  Please click on the tags.";

所以上面的单词#cool和#fun将成为uibutton动作的按钮。在函数中,我会将酷或乐趣传递给新的UIViewController。

谢谢!

3 个答案:

答案 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与连接的动作重叠。

查看this answer.

答案 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,其余字体以粗体显示: - enter image description here