4

任何人都知道如何在 IOS7 的评论文本中使 #KEY 和 @NAME 可点击(例如,与 instagram 的做法相同)?我正在尝试使用 NSMutableAttributedString 但我不确定如何检测单击事件,在下图中单击 @Username 应该将用户带到用户的个人资料

在此处输入图像描述

4

3 回答 3

7

UITextViewDelegate协议,iOS7中有一个新方法:textView:shouldInteractWithURL:inRange:.

您没有共享任何代码,但可以安全地假设您有一个attributedString和一个range代表您变成蓝色的区域。我还假设您可以将用户名提取到一个名为username.

使用这三条信息,您可以将链接属性添加到该范围。

[attributedString addAttribute:NSLinkAttributeName
                         value:[@"username://" stringByAppendingString:username]
                         range:range];

在您的委托中,您可以执行以下操作:

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
{
    if ([URL.scheme isEqualToString:@"username"]) {
        [self doSomethingWithUserName:URL.host];
        return NO;
    }

    return YES;
}

我相信他们在 WWDC 2013 的 Introducing Text Kit 会议上对此进行了演示。

于 2013-10-10T16:30:24.893 回答
1

您可以使用 HTML 链接并使用UIWebView呈现它

<div> Here goes the text. <a href="/users/Username">@Username</a> <a href="/tags/mytag">#mytag</a>. </div>

当用户单击链接时,将webView:shouldStartLoadWithRequest:navigationType:调用 Web 视图的委托方法。在那里,您可以从请求中获取 URL 并做任何您想做的事情。从这个方法返回很重要NO,否则 Web 视图会尝试加载请求。

于 2013-10-10T16:05:59.460 回答
0

您可以查看使用DTCoreText,它提供了可以添加到属性文本的链接按钮。它基于 HTML 解析,因此您需要对解析做一些额外的工作来确定链接按钮的位置。

或者,您可以在评论视图中添加一个轻拍手势识别器。当检测到点击时,您可以使用<UITextInput>来找出点击的文本以及它是否是“链接”。

于 2013-10-10T15:18:59.533 回答