UILabel 和 NSLinkAttributeName:链接不可点击
Posted
技术标签:
【中文标题】UILabel 和 NSLinkAttributeName:链接不可点击【英文标题】:UILabel and NSLinkAttributeName: Link is not clickable 【发布时间】:2013-11-20 04:39:48 【问题描述】:我想在我的 ios 7 项目中使用带有 NSLinkAttributeName
的属性字符串在 UILabel
实例内创建可点击链接,现在终于可以在不使用外部库的情况下实现这一点。
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
url, NSLinkAttributeName, nil];
在字符串上应用该属性会将文本显示为蓝色并带有下划线,但单击/点击时没有任何反应。为标签启用了用户交互。 有人知道怎么做这个吗?谢谢!
【问题讨论】:
【参考方案1】:我现在可以回答我自己的问题了:
我现在使用UITextView
而不是UILabel
。我已将 UITextView
格式化为外观和行为类似于我的标签并添加:
UITextView *textView = [[UITextView alloc] init];
textView.scrollEnabled = NO;
textView.editable = NO;
textView.textContainer.lineFragmentPadding = 0;
textView.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0);
textView.delegate = self;
别忘了设置委托,你要实现UITextViewDelegate
!现在我们实现委托方法:
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)url inRange:(NSRange)characterRange
return YES;
这会在点击/点击时自动从我的问题中的属性字符串中打开提供的NSURL
-instance。
记住:这仅适用于 iOS 7,对于旧版支持,您需要外部库
更新:
让UITextView
s 的行为就像标签一样最终是一团糟,我偶然发现了一些可怕的 iOS 行为。我最终使用了 TTTAttributedLabel 库,它非常棒,让我可以使用标签而不是 UITextView
s。
【讨论】:
.textContainer 是这里的关键。我将我的标签换成 textviews 并让链接正常工作,但它正在摆脱布局和外观。 你的意思是 UITextViewDelegate 不是 UITextFieldDelegate 是的,当然,我已经纠正了错误 - 谢谢。 @max.mustermann:您能否详细说明是什么问题导致您放弃了这种方法? @Ricardo,刚刚指出设置textView.textContainer.---
值是让 UITextViews 像 UILabel 一样布局的关键。也就是说,那些值,调整TextView中文字的padding;将它们设置为零会给你一个具有 UITextView 功能的 UILabel 外观。以上是关于UILabel 和 NSLinkAttributeName:链接不可点击的主要内容,如果未能解决你的问题,请参考以下文章
使 UILabel 以不断变化的内容和 AutoLayout 为中心