我有一个文本视图,我想在其中检测链接,但是当触摸点处没有链接时,它应该将触摸传播到下面的视图(目前没有)。它将包含在表格视图单元格中,如果用户点击链接,它应该进行交互(它可以工作),但是当点击另一个点时,它应该选择表格视图单元格。
我需要文本不可选择,所以我遵循了https://stackoverflow.com/a/27264999/811405并实施:
-(BOOL)canBecomeFirstResponder{
return NO;
}
在此之前它也没有发送下面的触摸事件,但我将其包含在内只是为了防止它干扰解决方案。
您需要将其子类化,而不是阻止您的文本视图成为第一响应者hitTest
方法,以便当单击发生在链接内时返回 textView,否则返回 nil。
@interface LinkOnlyTextView : UITextView
@end
@implementation LinkOnlyTextView
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
NSUInteger glyphIndex = [self.layoutManager glyphIndexForPoint:point inTextContainer:self.textContainer fractionOfDistanceThroughGlyph:nullptr];
NSUInteger characterIndex = [self.layoutManager characterIndexForGlyphAtIndex:glyphIndex];
if (characterIndex < self.textStorage.length) {
if ([self.textStorage attribute:NSLinkAttributeName atIndex:characterIndex effectiveRange:nullptr]) {
return self;
}
}
return nil;
}
@end
@blwinters 在稍后对此问题的回答中提供了此代码片段的 Swift 版本:https://stackoverflow.com/a/47913329/1279096
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)