美文网首页UIKitiOS 艾欧艾斯
富文本AttributedString总结(三)之链接属性的设置

富文本AttributedString总结(三)之链接属性的设置

作者: 懒得起名的伊凡 | 来源:发表于2015-10-14 10:50 被阅读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,在可编辑的状态下是不可点击的。
  • 在模拟器环境下一直无法点击,在真机上是正常的,不知道是不是模拟器不支持。

相关文章

网友评论

  • 狗狗臭鸡蛋:多个超链接分配不同颜色,怎么设置呢?直接设置NSForegroundColorAttributeName没有效果呢?
  • Zszen:我嘞个去, 我说模拟器怎么总是不能点的, 谢谢分享经验 气死我了
  • Jujuxw:您好,就是我设置了代理,但是就是没有回调shouldInteractWithURL方法,是哪里出了问题呢?
    wokenshin:注意:

    实现textView的代理,否则调不到回调方法。
    设置textView的 editable 属性为 NO,在可编辑的状态下是不可点击的。
    在模拟器环境下一直无法点击,在真机上是正常的,不知道是不是模拟器不支持。
  • 白牛桑:你好,这个链接虽然可以用,但是点击的触发的方式有点奇怪,它触发链接的好像类似于长按而不是点击,所以点击交互的时候不是很灵敏,必须要用摸的或者长按的方式才能触发链接,您有这样的问题吗

本文标题:富文本AttributedString总结(三)之链接属性的设置

本文链接:https://www.haomeiwen.com/subject/iepocttx.html