Арабские и английские символы в uilabel

Я использую:

    - (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. Если я использую только английские символы в строке, все хорошо - характер, который я коснулся, определил точно. Но если я попытаюсь объединить арабский и английский в одном ярлыке, как на экране

и попробуйте на aljaml.com потрогать, я получаю ассортимент amnesty.com. Что я должен делать?

1 ответ

Ваше решение работает на основе предположения, что UILabel использует те же параметры компоновки, что небезопасно. Попробуйте UITextView / TTTAttributedLabel или My GSAttributedLabel для взаимодействия ссылок. Надеюсь быть полезным.

Другие вопросы по тегам