Подтвердить что ты не робот

UILabel и NSLinkAttributeName: ссылка не доступна для кликов

Я хочу использовать атрибутные строки с помощью NSLinkAttributeName для создания интерактивных ссылок внутри экземпляра UILabel в моем проекте iOS 7, который теперь, наконец, возможен без использования внешних библиотек.

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];

NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
                          url, NSLinkAttributeName, nil];

Применение атрибута в строке отображает текст как синий и подчеркнутый, но ничего не происходит при щелчке/нажатии. Для ярлыка включено взаимодействие с пользователем. Кто-нибудь знает, как это сделать? Спасибо!

4b9b3361

Ответ 1

Теперь я могу ответить на свой вопрос: Теперь я использую UITextView вместо UILabel. Я отформатировал UITextView, чтобы посмотреть и вести себя как мои метки и добавил:

UITextView *textView = [[UITextView alloc] init];
textView.scrollEnabled = NO;
textView.editable = NO;
textView.textContainer.lineFragmentPadding = 0;
textView.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0);
textView.delegate = self;

Не забудьте установить делегат, вы должны реализовать UITextViewDelegate! Теперь мы реализуем метод делегата:

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)url inRange:(NSRange)characterRange
{
     return YES;
}

Это автоматически открывает предоставленный NSURL -instance из атрибутной строки в моем вопросе при щелчке/нажатии.

Помните: это работает только для iOS 7, для поддержки устаревших вам нужны внешние библиотеки

UPDATE:

Создание UITextView ведет себя точно так же, как ярлыки, в конечном итоге было беспорядком, и я наткнулся на какое-то отвратительное поведение iOS. Я закончил использование библиотеки TTTAttributedLabel, которая просто великолепна и позволила мне использовать метки вместо UITextView s.