UILabel和NSLinkAttributeName:链接不可单击

时间:2013-11-08 08:24:28

标签: ios7 uilabel nsurl nsattributedstring clickable

我想使用NSLinkAttributeName的属性字符串在我的iOS 7项目中的UILabel实例中创建可点击链接,现在终于可以在不使用外部库的情况下实现。

NSURL *url = [NSURL URLWithString:@"http://www.google.com"];

NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
                          url, NSLinkAttributeName, nil];

在字符串上应用该属性会将文本显示为蓝色&带下划线,但点击/点击没有任何反应。为标签启用了用户交互。 有人知道怎么做这个吗?谢谢!

1 个答案:

答案 0 :(得分:47)

我现在可以回答我自己的问题了: 我现在正在使用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 - 实例。

请记住:这仅适用于iOS 7,对于您需要外部库的旧版支持

<强>更新

使UITextView的行为与标签一样,最终是一团糟,我偶然发现了一些可怕的iOS行为。我最终使用的TTTAttributedLabel库非常棒,允许我使用标签代替UITextView