富文本AttributedString总结(三)之链接属性的设置
2015-10-14 本文已影响4055人
懒得起名的伊凡
之所以把 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,在可编辑的状态下是不可点击的。
- 在模拟器环境下一直无法点击,在真机上是正常的,不知道是不是模拟器不支持。