任何人都知道如何在 IOS7 的评论文本中使 #KEY 和 @NAME 可点击(例如,与 instagram 的做法相同)?我正在尝试使用 NSMutableAttributedString 但我不确定如何检测单击事件,在下图中单击 @Username 应该将用户带到用户的个人资料
3 回答
看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 会议上对此进行了演示。
您可以使用 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 视图会尝试加载请求。
您可以查看使用DTCoreText,它提供了可以添加到属性文本的链接按钮。它基于 HTML 解析,因此您需要对解析做一些额外的工作来确定链接按钮的位置。
或者,您可以在评论视图中添加一个轻拍手势识别器。当检测到点击时,您可以使用<UITextInput>
来找出点击的文本以及它是否是“链接”。