Ios7 UILabel和NSLinkAttributeName:链接不可单击

Ios7 UILabel和NSLinkAttributeName:链接不可单击,ios7,uilabel,nsurl,nsattributedstring,clickable,Ios7,Uilabel,Nsurl,Nsattributedstring,Clickable,我想将属性字符串与NSLinkAttributeName一起使用,在iOS 7项目中的UILabel实例中创建可单击的链接,现在终于可以不用使用外部库了 NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys: url, NSLinkAttribute

我想将属性字符串与
NSLinkAttributeName
一起使用,在iOS 7项目中的
UILabel
实例中创建可单击的链接,现在终于可以不用使用外部库了

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

NSDictionary *attr = [NSDictionary dictionaryWithObjectsAndKeys:
                          url, NSLinkAttributeName, nil];
在字符串上应用该属性会将文本显示为蓝色和下划线,但单击/点击时不会发生任何变化。已为标签启用用户交互。
有人知道怎么做吗?谢谢

我现在可以回答我自己的问题了: 我现在使用的是
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
s像标签一样运行完全是一团糟,我偶然发现了一些可怕的iOS行为。我最终使用了这个库,它非常棒,允许我使用标签而不是
UITextView
s.

这里的关键是.textContainer。我把我的标签换成了文本视图,并让链接正常工作,但它却改变了布局和外观。你肯定是说UITextViewDelegate而不是UITextFieldDelegateyeah,当然,我已经纠正了错误-谢谢。@max.mustermann:你能详细说明是什么问题导致你放弃这种方法吗?@Ricardo,刚才指出,设置
textView.textContainer.-
值是使UITextView像UILabels一样布局的关键。也就是说,这些值,调整文本视图中文本的填充;将它们设置为零,可以让您看到UILabel的外观以及UITextView的功能。