在iOS中的UITextView中检测归因文本上的点击

我有一个UITextView显示一个NSAttributedString。这个字符串包含我想制作的单词,这样当他们被点击时,我被回调,以便我可以执行一个动作。我意识到UITextView可以检测到一个URL上的点击并回调我的代理,但这些不是网址…

在我看来,使用iOS7和TextKit的强大,这应该是可能的,但是我找不到任何例子,我不知道从哪里开始。

我理解现在可以在字符串中创建自定义属性(虽然我还没有做到这一点),也许这些将有助于检测是否有一个魔术词被窃听?在任何情况下,我仍然现在不现在如何截取该水龙头和检测在哪个词的水龙头发生。

任何人都有解决方案?

请注意,不需要iOS 6兼容性。

我只是想帮助别人多一点。继Shmidt的回应之后,可能完全像我在原来的问题中提出的那样。

1)创建一个带有应用于可点击字词的自定义属性的属性字符串。例如。

NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:@"a clickable word" attributes:@{ @"myCustomTag" : @(YES) }];
[paragraph appendAttributedString:attributedString];

2)创建一个UITextView以显示该字符串,并向其中添加一个UITapGestureRecognizer。然后处理水龙头:

- (void)textTapped:(UITapGestureRecognizer *)recognizer
{
    UITextView *textView = (UITextView *)recognizer.view;

    // Location of the tap in text-container coordinates

    NSLayoutManager *layoutManager = textView.layoutManager;
    CGPoint location = [recognizer locationInView:textView];
    location.x -= textView.textContainerInset.left;
    location.y -= textView.textContainerInset.top;

    // Find the character that's been tapped on

    NSUInteger characterIndex;
    characterIndex = [layoutManager characterIndexForPoint:location
                                           inTextContainer:textView.textContainer
                  fractionOfDistanceBetweenInsertionPoints:NULL];

    if (characterIndex < textView.textStorage.length) {

        NSRange range;
        id value = [textView.attributedText attribute:@"myCustomTag" atIndex:characterIndex effectiveRange:&range];

        // Handle as required...

        NSLog(@"%@, %d, %d", value, range.location, range.length);

    }
}

这么容易当你知道如何!

http://stackoverflow.com/questions/19332283/detecting-taps-on-attributed-text-in-a-uitextview-in-ios

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在iOS中的UITextView中检测归因文本上的点击