【问题标题】:How to get part of text of UILabel when it is tapped?点击时如何获取UILabel的部分文本?
【发布时间】:2014-05-13 06:07:47
【问题描述】:

我有一个名为 lblApple 的简单标签,上面写着“这是一个苹果,苹果很好吃”。

现在当用户点击 UIlabel 的特定部分时,例如,如果用户点击该标签中的“好”,那么我想要那个字符串“好”。

我已经添加了点击手势和所有这些东西,但我找不到任何解决方案。

有人知道吗?

谢谢

【问题讨论】:

  • 我认为您需要为每个字符串创建UILabel .. 并将 UITapGesture 与每个 UILabel 一起附加,您可以通过点击标签轻松获得文本,因为它们是单独添加的。
  • 不,我的朋友,这不是好的解决方案。我有超过 5000 字。所以这不是一个好习惯。
  • 明确地说,您可以将 5000 个单词作为 UILabel 的文本属性,并且您希望接收一个操作并能够确定准确点击了哪个单词?
  • @AdamEberbach:是的,我的朋友,我已经将这些句子存储在数据库中,并且我正在显示在 UILabel 中,现在我想要在该标签内点击的文本部分。
  • 如果你只想选择,你可以看看 UITextInput 的 selectedTextRange 属性。

标签: ios uilabel


【解决方案1】:

您可以使用https://github.com/mattt/TTTAttributedLabel。这提供了在标签中添加链接的功能。因此,您可以检测链接是否被点击。您可以在您的示例中很好地作为链接。因此,如果用户点击好,您就可以处理该操作。您需要在此处自定义链接的样式。

来源:Tap Gesture on part of UILabel

【讨论】:

    【解决方案2】:

    //写一个正则表达式来匹配一个简单的字符串下面的表达式是在一个字符串中查找url

     NSRegularExpression *regexp = [NSRegularExpression regularExpressionWithPattern:@"(? i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))" options:NSRegularExpressionCaseInsensitive error:NULL];
    

    // 描述是你的文字 descriptionLabel 是你的TTTAttributedLabel

    分配委托人

    descriptionLabel.delegate = self;
    

    根据正则表达式查找匹配项

     [regexp enumerateMatchesInString:description options:0 range:NSMakeRange(0, [description length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags __unused, BOOL *stop __unused){
    
                NSURL *url = [NSURL URLWithString:[description substringWithRange:match.range]];
                [descriptionLabel addLinkToURL:url withRange:match.range];
    
    }];
    

    这是 OnClick 方法:

    - (void)attributedLabel:(TTTAttributedLabel *)label
     didSelectLinkWithURL:(NSURL *)url
     {
      NSlog("%@",label.text);
     }
    

    【讨论】:

    • 好的!您是否更改了正则表达式?我提到的正则表达式是在句子中查找 URL,例如“您可以在 www.amazon.com 上找到此产品并在 google.com 上找到更多信息”将检测 www.amazon.com 和 google.com 并且还会使确保您也分配了代表。 descriptionLabel.delegate = self;
    • 是的,我已经设置了委托,并且还更改了正则表达式,但没有工作。用户可以点击 UILabel 上的任意位置,所以我应该在正则表达式中给出整个文本吗?
    • in [regexp enumerateMatchesInString:description....方法描述 应该是整个文本,在你的情况下应该是“这是一个苹果,苹果很好”。那么我不确定,因为我能够检测到并在句子中的链接上执行 Tap 操作。尝试进行调试检查控制是否进入 [regexp enumerateMatchesInString:description.... 块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2011-06-19
    • 1970-01-01
    • 2016-12-10
    相关资源
    最近更新 更多