TTTAttributedLabel 和链接弹出框

Posted

技术标签:

【中文标题】TTTAttributedLabel 和链接弹出框【英文标题】:TTTAttributedLabel and popover for link 【发布时间】:2012-12-24 13:45:19 【问题描述】:

是否可以检测链接文本的CGRect 或位置的CGPoint,以显示TTTAttributedLabel 中单击链接的弹出框(在ipad 上)? 我需要使用TTTAttributedLabel 在点击的链接上显示弹出框。

谢谢!

【问题讨论】:

我认为 TTTAttributedLabel 没有任何方法可以做到这一点。如果您只需要知道链接在哪里,您可以注册用户触摸的位置。但是,这不会为您提供链接的任何特定点,例如中心或开头。 是的,我将触摸的 CGPoint 传输到我的控制器,然后显示弹出框。但我希望搜索链接中点。另一个问题如何处理行分隔的链接。无论如何,欢迎任何帮助。 【参考方案1】:

您只能通过修改 TTTAttributedLabel 来支持此行为来做到这一点。

1) 修改委托方法:

- (void)attributedLabel:(TTTAttributedLabel *)label
   didSelectLinkWithURL:(NSURL *)url
                atPoint:(CGPoint)point;

2) 在TTTAttributedLabel.m 源中,修改touchesEnded:withEvent: 并获取触摸点并将其传递给委托方法。

    switch (result.resultType) 
        case NSTextCheckingTypeLink:
            if ([self.delegate respondsToSelector:@selector(attributedLabel:didSelectLinkWithURL:atPoint:)]) 
                UITouch *touch = [touches anyObject];
                CGPoint touchPoint = [touch locationInView:self];
                [self.delegate attributedLabel:self didSelectLinkWithURL:result.URL atPoint:touchPoint];
                return;

3) 在视图控制器中,您需要将该触摸点转换为与视图控制器的视图相对坐标:

#pragma mark TTTAttributedLabelDelegate
- (void)attributedLabel:(TTTAttributedLabel *)label
   didSelectLinkWithURL:(NSURL *)url 
                atPoint:(CGPoint)point

        CGPoint normalizedPoint = [self convertPoint:point fromView:label];        

        UIActionSheet *actionSheet = [[UIActionSheet alloc] ...
        [actionSheet showFromRect:CGRectMake(normalizedPoint.x, normalizedPoint.y-kSensibleOffset, 10, 10)
                           inView:label
                         animated:YES];
    
#pragma mark -

【讨论】:

【参考方案2】:

您不希望通过尝试跟踪位置来在手势级别执行此操作。既然你有一个链接,只需覆盖openURL 并在拦截链接点击时做任何你想做的事情。更多详情here。

【讨论】:

我需要在链接点击时显示弹出框(带箭头)。你明白问题吗? 是的,我明白了。我的意思是不要尝试跟踪触摸,只需让链接通知您,然后您就可以启动弹出窗口。 我必须从哪里启动popover?任何带有“通知”的CGRect?无法理解你的意思,抱歉。

以上是关于TTTAttributedLabel 和链接弹出框的主要内容,如果未能解决你的问题,请参考以下文章

TTTAttributedLabel 的链接点击颜色

layer弹出框初体验

子页面(弹出框)获取父页面中 链接地址,获取传值问题

当 UIAlertView 出现时 TTTAttributedLabel 链接字体发生变化

TTTAttributedLabel 可以检测链接,但不能正确按下

TTTAttributedLabel 链接检测无法使用 Storyboard