Установить текст (с Emojis, специальные символы, ссылки) в UILabel, и ссылка должна быть интерактивной - PullRequest
0 голосов
/ 08 октября 2018

В одном из моих приложений есть API, вызываемый и получающий данные с сервера.В этом есть текст, который содержит смайлики, специальные символы, URL-адреса и т. Д.

Not In My UITableViewCell, у меня есть Simple UILabel и я установил текст на метку.До сих пор все работает нормально.

Но теперь я хочу, чтобы URL-адреса в UILabel были доступны для вставки, поэтому когда мы нажимаем на URL-адрес, и он должен быть открыт в Safari.

enter image description here

Примечание. Поскольку текст поступает с сервера, я не знаю положение URL-адреса, и будет также несколько URL-адресов.

Что для этого сделать?Я искал, но не нашел решения.

1 Ответ

0 голосов
/ 08 октября 2018

Мне нужен был такой вид связанного текста для другого проекта в прошлом месяце.Я создал пользовательский UITableViewCell с объектом UITextView в ячейке, разделенным на подклассы пользовательского UITextView.Я только что сделал быстрый демо-проект и поставил его для вас сейчас.Не стесняйтесь использовать его.

github.com / fareast555 / MPC_LinkedTextView

Основным секретным соусом для использования текстовых ссылок является атрибут NSLinkAttributeName в изменяемом тексте и говоритсистема для обработки ссылок.

- (void)updateTextViewWithFullText:(NSString *)fullText linkTriggerText:(NSString *)triggerText linkURLString:(NSString *)urlString
{
     //Create a mutable string based on the full text
     NSMutableAttributedString *mutableString = [[NSMutableAttributedString alloc]initWithString:fullText attributes:nil];

     //Add the link attribute across the range of the target text
     [mutableString addAttribute:NSLinkAttributeName value:urlString range:[fullText rangeOfString:triggerText]];

     //Add any other font or color bling as needed
     [mutableString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:18 weight:UIFontWeightMedium] range:NSMakeRange(0, [fullText length])];

     //Set the mutable text to the textfield
     [self setAttributedText: mutableString];
}

#pragma mark - UITextViewDelegate

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

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
    return NO;
}

А для текстовых представлений вам будет проще использовать автоматическую разметку, если вы отключите прокрутку.

#pragma mark - Configure
- (void)_configureTextView
{
    self.delegate = self;
    [self setEditable:NO];
    [self setSelectable:YES];
    [self setScrollEnabled:NO];
    [self setUserInteractionEnabled:YES];
    [self setDataDetectorTypes:UIDataDetectorTypeLink];
    self.scrollIndicatorInsets = UIEdgeInsetsZero;
}

Screenshot of table view

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...