富文字AttributedString總結(三)之連結屬性的設定

weixin_34290000發表於2015-10-14

之所以把 NSLinkAttributeName 屬性單獨列出來,是因為在 UILabel 和 UITextField 中是無法使用該屬性的。更準確點說是在UILabel 和 UITextField 中無法實現點選連結啟動瀏覽器開啟一個URL地址,因為在此過程中用到了一個代理函式。只能用在 UITextView 中。

NSLinkAttributeName 的物件是 NSURL 型別 或 NSString,但是優先使用 NSURL

需要實現UITextView的代理方法 - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange,在該方法中,返回 YES,則會開啟URL地址,返回 NO則不會。

設定方式一

將全部文字設定為連結(可點選)

NSDictionary *dictAttr = @{NSLinkAttributeName:[NSURL URLWithString:@"http://www.jianshu.com"]};
NSAttributedString *attrStr = [[NSAttributedString alloc]initWithString:@"簡書" attributes:dictAttr];
textView.attributedText = attrStr;

設定方式二

將部分文字設定為連結

NSString *str = @"跳轉到簡書";
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc]initWithString:str];
[attrStr addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"http://www.jianshu.com"] range:[str rangeOfString:@"簡書"]];
textView.attributedText = attrStr;

代理回撥方法

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
{
    //在這裡是可以做一些判定什麼的,用來確定對應的操作。
return YES;
}
注意:
  • 實現textView的代理,否則調不到回撥方法。
  • 設定textView的 editable 屬性為 NO,在可編輯的狀態下是不可點選的。
  • 在模擬器環境下一直無法點選,在真機上是正常的,不知道是不是模擬器不支援。

相關文章