2017-02-22 91 views
0

Мой текущий URL длиной 801 символов. Я обнаружил, что автоматическое обнаружение ссылок не работает в UITextView, если длина URL превышает 350 символов. Также я тестировал свою ссылку в приложении «Сообщения», она не работает (сообщения будут использовать UILabel или UITextView для отображения текстового содержимого). Есть ли способ обнаружить URL длиной более 350 символов?Автоматическое обнаружение ссылок не удается в UITextView, если URL-адрес слишком большой

ответ

0

Если детектор данных UITextView не смог определить URL-адрес длиной более 350 символов в качестве вашего исследования, я думаю, что вы сможете сделать это самостоятельно с помощью регулярного выражения. После обнаружения URL-адреса вы можете использовать атрибуциюString для установки в UITextView.

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.view.backgroundColor = [UIColor grayColor]; 
    self.textView.textColor = [UIColor blackColor]; 
    self.textView.contentInset = UIEdgeInsetsMake(0, 0, 10, 0); 

    NSString *testString = @"google dog meme https://www.google.com.sg/search?q=dog+meme&espv=2&biw=1672&bih=890&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjWr8rexqXSAhUO9GMKHYHXD7QQ_AUIBigB#tbm=isch&q=doge+meme&imgrc=SFF-4BKQucOc4M: hhahaa"; 
    NSDataDetector *detect = [[NSDataDetector alloc] initWithTypes:NSTextCheckingTypeLink error:nil]; 
    NSArray *matches = [detect matchesInString:testString options:0 range:NSMakeRange(0, [testString length])]; 

    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:testString attributes:nil]; 
    NSTextCheckingResult *result = matches.firstObject; 
    if (result) { 
     [attributedString addAttribute:NSLinkAttributeName value:result.URL.absoluteString range:result.range]; 
    } 
    self.textView.editable = NO; 
    self.textView.attributedText = attributedString; 
    self.textView.userInteractionEnabled = YES; 
    self.textView.delegate = self; 
} 

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange { 
    NSLog(@"#### %@", URL); 
    return YES; 
} 

Еще один подход заключается в том, что с использованием URL-адреса, чтобы сократить URL-адрес сначала, а затем отобразить их. Я думаю, что это ценно с точки зрения UX, потому что пользователи могут не захотеть щелкнуть по действительно длинному URL-адресу.

Надеюсь, это поможет вам.

+0

Не работает. – phamot

+0

Хм, это с моей стороны, в чем проблема? – HDT

+0

Можете ли вы попробовать с любым URL-адресом более 350 символов ?. Спасибо за предложение уклонителя URL. – phamot