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 和链接弹出框的主要内容,如果未能解决你的问题,请参考以下文章
当 UIAlertView 出现时 TTTAttributedLabel 链接字体发生变化