如何减少链接长度或为 TTTAttributedLabel 中检测到的链接设置固定长度

Posted

技术标签:

【中文标题】如何减少链接长度或为 TTTAttributedLabel 中检测到的链接设置固定长度【英文标题】:How to reduce length of links OR set a fixed length for links detected in TTTAttributedLabel 【发布时间】:2015-08-17 12:42:17 【问题描述】:

用户粘贴的链接很长,包含“http://”等,因此我想限制链接的长度,只显示主网站名称或更多。

例子:

用户粘贴的链接:

http://www.androidpolice.com/2015/08/16/an-alleged-leak-of-lgs-nexus-5-2015-bullhead-pops-up-on-google/

我想在标签中显示的链接:www.androidpolice.com/2015/08/...

有什么办法吗?

我搜索并找到了一个名为 attributesTruncationToken 的东西,但我不太了解,我认为它与行尾的截断有关。

【问题讨论】:

这看起来就像一个 NSAttributedString 。了解如何使用它们,并用你想要的任何文本来掩盖你想要的属性范围。教程无处不在。您将必须扫描子字符串,以确保包含第一个子字符串 http:// + www + url + name + .com +/%@+/%@ 然后将其重命名为该范围 【参考方案1】:

我不使用 TTTAttributeLabel,但 此答案适用于所有正在努力创建没有 3rd 方 API 的 URL 缩短器的未来问题寻求者。

只需使用NSMutableAttributedString 并传递给UIDataDetectorTypeLink 有能力的对象:

假设您的用户输入了一个链接或完全传递了一个字符串:

我是用户。我想输入这个 URL 以分享给所有其他很棒的 Apple 产品用户,并且只分享给 Apple 产品 :)。在这里查看我的链接http://www.androidpolice.com/2015/08/16/an-alleged-leak-of-lgs-nexus-5-2015-bullhead-pops-up-on-google/

我们可以使用常用的方法轻松提取文本:

NSString *userInput = @"I am a user. I want to enter this URL to share to all other awesome users of Apple products, and only Apple products :). Check out my link here http://www.androidpolice.com/2015/08/16/an-alleged-leak-of-lgs-nexus-5-2015-bullhead-pops-up-on-google/"

// get the range of the substring (url) starting with @"http://"
NSRange httpRange = [userInput rangeOfString:@"http://" options:NSCaseInsensitiveSearch];

if (httpRange.location == NSNotFound) 
    NSLog(@"URL not found");
 else 
    //Get the new string from the range we just found
    NSString *urlString = [userInput substringFromIndex:httpRange.location];
    //create the new url
    NSURL *newURL = [NSURL URLWithString:urlString];
    //cut off the last components of the string
    NSString *shortenedName = [urlString stringByDeletingLastPathComponent];
    //new output
    NSLog(@"%@", [NSString stringWithFormat:@"\n original user input : \n %@ \n original URL name : \n %@ \n shortenedName : \n %@", userInput, urlString, shortenedName]);

    //We have everything we need so all we have remaining to do is create the attributes and pass into a UITextView. 
    self.someTextView.attributedText = [self createHyperLinkForURL:newURL withName:shortenedName];

在哪里[self createHyperLinkForURL:newURL withName:shortenedName];

-(NSMutableAttributedString *)createHyperLinkForURL:(NSURL *)url withName:(NSString *)hyperLinkText 
    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:hyperLinkText];
    [string beginEditing];
    [string addAttribute:NSLinkAttributeName
               value:url
               range:NSMakeRange(0, string.length)];
    [string endEditing];
    return string;

【讨论】:

这个方法到底是做什么的 - stringByDeletingLastPathComponent ?在 Apple 文档中,它说我们不应该将它与 Web URL 一起使用。 正如它所说的那样:删除您提供的字符串的最后一个路径。因此,在具有/path/subpath/subpath/subpath 的路径中,它会删除最后一个路径,无论有多少。只需通过控制台日志运行一次,您就会看到。答案中提供了您需要的一切 哦,@VineetAshtekar 您没有将它与 weburl 一起使用,您在技术上将它与字符串一起使用 NSString *urlString newURL 是实际的 url。

以上是关于如何减少链接长度或为 TTTAttributedLabel 中检测到的链接设置固定长度的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JavaScript 减少视频的长度? [关闭]

如何减少uitabbarcontroller中选项卡的点击访问长度?

当值为空或为空时如何返回默认值

如何在不影响长度较小的数据的情况下减少html css中冗长数据的宽度?

文件内容的读取与写入

当数据未定义或为空时如何使用 Lodash