是否可以检测CGRect
链接文本或CGPoint
位置,以显示点击链接的弹出框(在 ipad 上)TTTAttributedLabel
?我需要在单击的链接上显示弹出框TTTAttributedLabel
。
谢谢!
是否可以检测CGRect
链接文本或CGPoint
位置,以显示点击链接的弹出框(在 ipad 上)TTTAttributedLabel
?我需要在单击的链接上显示弹出框TTTAttributedLabel
。
谢谢!
您只能通过修改 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 -
您不想通过尝试跟踪位置来在手势级别执行此操作。既然你有一个链接,openURL
当你拦截链接点击时,只需覆盖并做任何你想做的事情。更多细节在这里。