2015-02-24 2 views
0

Мне нужно установить пару ссылок при щелчке атрибутной строки в ярлыке/тексте (предпочтительнее UILabel). Я использовал следующий код для установки ссылок (несколько ссылок на одной метке).Attributted String ссылка не открыта

NSMutableAttributedString *firstAttributedString = [[NSMutableAttributedString alloc] initWithString:@"By tapping 'Yes', you agree to the " ]; 

NSMutableAttributedString *secondAttributedString = [[NSMutableAttributedString alloc] initWithString:@"Terms of Use "]; 
[firstAttributedString appendAttributedString:secondAttributedString]; 
NSMutableAttributedString *thirdAttributedString = [[NSMutableAttributedString alloc] initWithString:@"and "]; 
[firstAttributedString appendAttributedString:thirdAttributedString]; 

NSMutableAttributedString *fourthAttributedString = [[NSMutableAttributedString alloc] initWithString:@"Privacy Policy "]; 
[firstAttributedString appendAttributedString:fourthAttributedString]; 

NSMutableAttributedString *fifthAttributedString = [[NSMutableAttributedString alloc] initWithString:@"of example"]; 
[firstAttributedString appendAttributedString:fifthAttributedString]; 

NSURL *URL = [NSURL URLWithString: @"example://termsOfUse"]; 
[secondAttributedString addAttribute: NSLinkAttributeName value: URL range: NSMakeRange(0, secondAttributedString.length)]; 
[alertTextView setUserInteractionEnabled: YES]; 
alertTextView.editable=NO; 

alertTextView.attributedText = firstAttributedString; 
alertTextView.dataDetectorTypes = UIDataDetectorTypeLink; 

Я поставил мой info.plist ответить на схеме URL вызова, но этот метод в

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

делегат не запускающего. Поэтому я предполагаю, что щелчок не запускается. Что я здесь делаю неправильно? Что я могу сделать, чтобы решить эту проблему?

+0

https://developer.apple.com/library/ios/qa/qa1495/_index.html –

ответ

0

При дальнейшем рассмотрении вашего образца кода вы пытаетесь изменить secondAttributedString после того, как он был добавлен в firstAttributedString. Это не даст желаемых результатов, поскольку NSAttributedStrings: не, как массивы.

Придумайте добавления строк, как присоединяя копию того, что вы пройти в.

Попробуйте добавить ссылку атрибуты перед тем добавления secondAttributedString к первому.

NSMutableAttributedString *firstAttributedString = [[NSMutableAttributedString alloc] initWithString:@"By tapping 'Yes', you agree to the " ]; 

NSMutableAttributedString *secondAttributedString = [[NSMutableAttributedString alloc] initWithString:@"Terms of Use "]; 
NSURL *URL = [NSURL URLWithString: @"example://termsOfUse"]; 
[secondAttributedString addAttribute: NSLinkAttributeName value: URL range: NSMakeRange(0, secondAttributedString.length)]; 
[firstAttributedString appendAttributedString:secondAttributedString]; 


NSMutableAttributedString *thirdAttributedString = [[NSMutableAttributedString alloc] initWithString:@"and "]; 
[firstAttributedString appendAttributedString:thirdAttributedString]; 
NSMutableAttributedString *fourthAttributedString = [[NSMutableAttributedString alloc] initWithString:@"Privacy Policy "]; 
[firstAttributedString appendAttributedString:fourthAttributedString]; 

NSMutableAttributedString *fifthAttributedString = [[NSMutableAttributedString alloc] initWithString:@"of example"]; 
[firstAttributedString appendAttributedString:fifthAttributedString]; 
[alertTextView setUserInteractionEnabled: YES]; 
alertTextView.editable=NO; 

alertTextView.attributedText = firstAttributedString; 

Убедитесь, что UITextView имеет следующие свойства устанавливают:

textView.editable = NO; 
textView.dataDetectorTypes = UIDataDetectorTypeAll; 
textView.delegate = self; // assuming `self` is the ViewController 

Вы должны вместо этого реализовать следующую delegate method:

textView:shouldInteractWithURL:inRange: 

и вернуть NO и обрабатывать действием самостоятельно ,

+0

метод делегата не вызывает, и он до сих пор ведет себя так же –

+0

@AthiraKrishan, в ViewDidload мимо этой линии textView.delegate = самостоятельно; –

+0

@AthiraKrishnan после рассмотрения вашего кода, я сделал редактирование своего ответа. Попробуйте обе части. –

Смежные вопросы