之所以把 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.lxweimin.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.lxweimin.com"] range:[str rangeOfString:@"簡書"]];
textView.attributedText = attrStr;
代理回調方法
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
{
//在這里是可以做一些判定什么的,用來確定對應的操作。
return YES;
}
注意:
- 實現textView的代理,否則調不到回調方法。
- 設置textView的 editable 屬性為 NO,在可編輯的狀態下是不可點擊的。
- 在模擬器環境下一直無法點擊,在真機上是正常的,不知道是不是模擬器不支持。