uilabel中的阿拉伯语和英语字符

时间:2017-07-05 16:05:09

标签: ios objective-c core-text nstextstorage nstextcontainer

我用:

    - (void)handleLinksTouch:(CGPoint)touchPoint {
        NSTextStorage *textStorage = [[NSTextStorage alloc] initWithAttributedString:self.attributedString];

        NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
        [textStorage addLayoutManager:layoutManager];

        NSTextContainer *textContainer = [[NSTextContainer alloc] initWithSize:self.frame.size];
        textContainer.lineFragmentPadding = 0;

        [layoutManager addTextContainer:textContainer];

        NSUInteger charIndex = [layoutManager characterIndexForPoint:touchPoint inTextContainer:textContainer fractionOfDistanceBetweenInsertionPoints:NULL];

        NSDictionary *charAttributes = [self.attributedString attributesAtIndex:charIndex effectiveRange:NULL];
        TVMessageLink *link = charAttributes[TVLinkAttributeName];

        if ([self.delegate respondsToSelector:@selector(linkLabel:didSelectLink:)]) { 
            [self.delegate linkLabel:self didSelectLink:link];
        } 
    }

用于确定触摸UILabel中我的属性文本中的某些链接。如果我只在一个字符串中使用英文字符,那么一切都很好 - 我所触及的字符确切地确定了。但是,如果我尝试将阿拉伯语和英语组合在一个标签中,就像屏幕enter image description here

一样

并尝试触摸aljaml.com我获得了amnesty.com的范围。我该怎么办?

1 个答案:

答案 0 :(得分:0)

您的解决方案的工作原理是假设UILabel使用相同的布局选项,这是不安全的。 尝试使用UITextView / TTTAttributedLabel或我的GSAttributedLabel进行链接互动。希望能提供帮助。