pan*_*f07 16 objective-c ios uitapgesturerecognizer tttattributedlabel
有容器视图和UITapGestureRecognizer上面.它还有一个子视图TTTAttributedLabel.
当我从容器视图中删除手势识别器时,委托方法 TTTAttributedLabelDelegate
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url can be called.
Run Code Online (Sandbox Code Playgroud)
当我在容器视图上添加手势识别器时.只调用其action方法.委托方法TTTAttributedLabelDelegate不会被调用.
现在我需要在我点击链接时调用委托方法TTTAttributedLabel,并在我点击容器视图的其他区域时调用action方法.
谢谢.
Nit*_*hel 15
用它gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch来检测你的事件.
- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch.view isKindOfClass:[TTTAttributedLabel class]])
{
return FALSE;
}
else
{
return TRUE;
}
}
Run Code Online (Sandbox Code Playgroud)
你也可以使用 if ([touch.view isKindOfClass:[UIControl class]])所有UIControl,例如按钮甚至检测UIGestureRecognizer.希望这对你有帮助
我尝试了@Nitin的解决方案,但它有一个问题,因为@ n00bProgrammer指出.此外,用户体验变得非常糟糕.我不得不点击几次来激活在SuperView上添加的tapGesture.
在这里,您有更好的解决方案.TTTAttributedLabel有一个有用的实例方法,如下所示.
- (BOOL)containslinkAtPoint:(CGPoint)point
Run Code Online (Sandbox Code Playgroud)
这将返回是否在给定点找到NSTextCheckingResult.
因此,请使用以下代码段,然后只链接已添加的部分文本将作为可连接的链接工作,其余区域将根据需要激活您的tapGesture.用户体验也很出色.
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([yourTTTAttributedLabel containslinkAtPoint:[touch locationInView:yourTTTAttributedLabel]])
return FALSE;
else
return TRUE;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4550 次 |
| 最近记录: |