富文本AttributedString總結(jié)(三)之鏈接屬性的設(shè)置

之所以把 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ī)上是正常的,不知道是不是模擬器不支持。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容