之所以把 NSLinkAttributeName 屬性單獨(dú)列出來,是因為在 UILabel 和 UITextField 中是無法使用該屬性的。更準(zhǔn)確點(diǎn)說是在UILabel 和 UITextField 中無法實(shí)現(xiàn)點(diǎn)擊鏈接啟動瀏覽器打開一個URL地址,因為在此過程中用到了一個代理函數(shù)。只能用在 UITextView 中。
NSLinkAttributeName 的對象是 NSURL 類型 或 NSString,但是優(yōu)先使用 NSURL。
需要實(shí)現(xiàn)UITextView的代理方法 - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange,在該方法中,返回 YES,則會打開URL地址,返回 NO則不會。
設(shè)置方式一
將全部文字設(shè)置為鏈接(可點(diǎn)擊)
NSDictionary *dictAttr = @{NSLinkAttributeName:[NSURL URLWithString:@"http://m.itdecent.cn"]};
NSAttributedString *attrStr = [[NSAttributedString alloc]initWithString:@"簡書" attributes:dictAttr];
textView.attributedText = attrStr;
設(shè)置方式二
將部分文字設(shè)置為鏈接
NSString *str = @"跳轉(zhuǎn)到簡書";
NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc]initWithString:str];
[attrStr addAttribute:NSLinkAttributeName value:[NSURL URLWithString:@"http://m.itdecent.cn"] range:[str rangeOfString:@"簡書"]];
textView.attributedText = attrStr;
代理回調(diào)方法
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange
{
//在這里是可以做一些判定什么的,用來確定對應(yīng)的操作。
return YES;
}
注意:
- 實(shí)現(xiàn)textView的代理,否則調(diào)不到回調(diào)方法。
- 設(shè)置textView的 editable 屬性為 NO,在可編輯的狀態(tài)下是不可點(diǎn)擊的。
- 在模擬器環(huán)境下一直無法點(diǎn)擊,在真機(jī)上是正常的,不知道是不是模擬器不支持。