【问题标题】:UILabel and NSLinkAttributeName: Link is not clickableUILabel 和 NSLinkAttributeName:链接不可点击
【发布时间】: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];

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

【问题讨论】:

    标签: ios7 uilabel nsurl nsattributedstring clickable


    【解决方案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,对于旧版支持,您需要外部库

    更新:

    UITextViews 的行为就像标签一样最终是一团糟,我偶然发现了一些可怕的 iOS 行为。我最终使用了 TTTAttributedLabel 库,它非常棒,让我可以使用标签而不是 UITextViews。

    【讨论】:

    • .textContainer 是这里的关键。我将我的标签换成 textviews 并让链接正常工作,但它正在摆脱布局和外观。
    • 你的意思是 UITextViewDelegate 不是 UITextFieldDelegate
    • 是的,当然,我已经纠正了错误 - 谢谢。
    • @max.mustermann:您能否详细说明是什么问题导致您放弃了这种方法?
    • @Ricardo,刚刚指出设置textView.textContainer.--- 值是让 UITextViews 像 UILabel 一样布局的关键。也就是说,那些值,调整TextView中文字的padding;将它们设置为零会给你一个具有 UITextView 功能的 UILabel 外观。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2010-11-18
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多