其实初学iOS开发就遇到这样的问题, 但是当初不知道该怎么搞, 使用label+button拼到一块的[笑哭]! 现在想想那时候真是SB....
然后现在项目中可能要用到了, 专门看了一下, 今天主要找到了两个第三方, MLLabel
和TTTAttributedLabel
, 其中TTTAttributedLabel在github上被star六千多次, 但是两个都体验一下, 我觉得但从实现linkLabel上来说, 还是MLLabel更加好用, 简单的几个属性和方法, 而TTTAttributedLabel可能功能更加强大? 总的来说, 用起来更复杂, 相对来说我还是更喜欢用小众的MLLabel.
一段代码:
- (MLLinkLabel *)linkLabel { if (!_linkLabel) { _linkLabel = [[MLLinkLabel alloc] initWithFrame:CGRectMake(10, 10, 300, 200)]; _linkLabel.backgroundColor = [UIColor whiteColor]; _linkLabel.numberOfLines = 0; _linkLabel.allowLineBreakInsideLinks = YES; } return _linkLabel;}- (void)configMLLabel { //测试给一个含有链接的attrStr NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc]initWithString:@"人生若只如初见,http://google.com何事秋风悲画扇。dudl@qq.com等闲变却故人心,却道故人心易变。骊山语罢清宵半,13612341234泪雨零铃终不怨。何如薄幸锦衣郎,比翼连枝当日愿。"];// [attrStr addAttribute:NSLinkAttributeName value:@"http://google.com" range:NSMakeRange(0, 2)];// [attrStr addAttribute:NSLinkAttributeName value:@"dudl@qq.com" range:NSMakeRange(3, 2)];// [attrStr addAttribute:NSLinkAttributeName value:@"13612341234" range:NSMakeRange(10, 10)]; NSRange range = [attrStr.string rangeOfString:@"等闲变却故人心"]; [attrStr addAttribute:NSLinkAttributeName value:@"abcdhenf" range:range]; [self.view addSubview:self.linkLabel]; self.linkLabel.attributedText = attrStr; [_linkLabel setDidClickLinkBlock:^(MLLink *link, NSString *linkText, MLLinkLabel *label) { NSLog(@"%ld %@ %@", link.linkType, linkText, link.linkValue); }]; //在设置了text后针对修改link样式的例子 //这段代码用断言可以更好的实现 for (MLLink *link in self.linkLabel.links) { if ([link.linkValue isEqualToString:@"13612341234"]) { link.linkTextAttributes = @{NSForegroundColorAttributeName:[UIColor colorWithRed:1.000 green:0.607 blue:0.172 alpha:1.000]}; } } [self.linkLabel invalidateDisplayForLinks];}