![]() |
1
177
一般来说,如果我们想要在uilabel显示的文本中有一个可点击的链接,我们需要解决两个独立的任务:
第一个很容易。从iOS 6开始,uilabel支持显示属性化字符串。您需要做的只是创建和配置nsmutableAttributedString的实例:
就是这样!上面的代码使uilabel显示 带字符串 link 现在我们应该检测这个链接上的接触。其目的是捕获uilabel中的所有tap,并确定tap的位置是否足够靠近链接。为了捕捉触摸,我们可以在标签中添加轻触手势识别器。确保为标签启用用户交互,默认情况下已将其关闭:
现在最复杂的东西是:找出点击是否在链接显示的地方,而不是标签的任何其他部分。如果我们有单行的uilabel,这个任务可以通过硬编码显示链接的区域边界相对容易地解决,但是让我们更优雅地解决这个问题,对于一般情况下-多行uilabel,在不了解链接布局的情况下。 其中一种方法是使用iOS 7中引入的文本工具包API的功能:
将创建和配置的nslayoutManager、nstextcontainer和nstextstorage实例保存在类的属性中(很可能是uiviewcontroller的后代),我们在其他方法中需要它们。 现在,每次标签更改其帧时,更新textcontainer的大小:
最后,检测水龙头是否在连接处:
|
![]() |
2
49
我在延伸
@NAlexN
原始详细解决方案,带
@zekel
优秀的延伸
扩展UitapGestureRecognizer
用法
安装程序
重要事项:
|
![]() |
3
36
uibuttontypecustom是一个可单击的标签,如果您没有为它设置任何图像。 |
![]() |
4
32
(我的回答基于@nalexn's excellent answer . 我不会重复他对每一步的详细解释。) 我发现将支持可点击的uilabel文本作为一个类别添加到uitapGestureRecognizer是最方便和直接的。 (你不 有 如某些答案所示,使用UItextView的数据检测器。) 将以下方法添加到UITapGestureRecognizer类别:
示例代码
手势回拨
|
![]() |
5
32
旧问题,但如果有人可以使用
但是,如果您需要自定义检测,也就是说,如果您希望在用户单击某个特定单词后能够调用任何自定义方法,则需要使用
引用上述链接中的代码:
要检测这些链接单击,请执行以下操作:
PS:确保您的
|
![]() |
6
19
如果您在
|
![]() |
7
12
将@samwize的扩展名转换为swift 4:
要设置识别器(在对文本和内容着色后):
…然后手势识别器:
|
![]() |
8
9
正如我在中提到的 this post , 这是我为uilabel中的链接专门创建的一个轻量级库 FRHyperLabel . 要达到这样的效果: Lorem 我是多萝坐阿美,神圣的爱你的精英。 Pellentesque 奎斯 blandit 厄洛斯,坐在阿米特·维希库拉·朱斯托。纳姆在乌尔纳内克。 Maecenas 交流扫描电镜,欧盟扫描电镜,笔记本电脑。 使用代码:
|
![]() |
9
7
我创建了名为的uilabel子类 ResponsiveLabel 它基于iOS 7中引入的textkit API。它使用的方法与 NAlexN . 它提供了在文本中指定要搜索的模式的灵活性。可以指定要应用于这些模式的样式,以及要在攻丝模式时执行的操作。
如果要使字符串可单击,可以这样做。此代码将属性应用于字符串“text”的每次出现。
|
![]() |
10
6
在Swift 3中工作,在这里粘贴整个代码
|
![]() |
11
6
以下是超链接uilabel的示例代码: 来源: http://sickprogrammersarea.blogspot.in/2014/03/adding-links-to-uilabel.html
|
![]() |
12
4
这是纳勒森答案的快速版本。
}
然后您可以在
当一个字符被点击时,最好有一个自定义属性来使用。现在,它是
|
![]() |
13
4
正如在早期的awnser中报告的那样,uitextview能够处理链接上的触摸。这可以通过使文本的其他部分作为链接进行扩展。attributedTextView库是一个uitextView子类,可以很容易地处理这些子类。有关详细信息,请参阅: https://github.com/evermeer/AttributedTextView 您可以使文本的任何部分像这样交互(其中textview1是uitextview iboutlet):
对于处理散列标签和注释,可以使用如下代码:
|
![]() |
14
3
我很难处理这件事…带有属性文本上链接的uilabel…只是头痛,所以我最后用了 ZSWTappableLabel . |
![]() |
15
3
我在扩展@samwize的答案以处理多行uilabel,并给出一个使用uibutton的示例
|
![]() |
16
2
对于完全自定义的链接,您需要使用uiwebview-您可以截取调用,以便在按下链接时转到应用程序的其他部分。 |
![]() |
17
2
以下是目标C类别中的一个下拉项,它可以在现有的
通过uilabel子类(即没有objc_getassociatedobject mess)可以更清楚地完成这一点,但是如果您像我一样,您希望避免为了向现有uikit类添加一些额外的函数而生成不必要的(第三方)子类。此外,它还提供了可点击链接的优点
任何
现有的uilabel,例如现有的
我试图通过使用现有的
基本上,它通过添加
注意-在
|
![]() |
18
2
我遵循这个版本, 斯威夫特4:
调用示例:
|
![]() |
19
1
使用以下.h和.m文件创建类。在.m文件中有以下函数
在这个函数中,我们将检查需要为其执行操作的子字符串的范围。使用您自己的逻辑来设置范围。 下面是子类的用法
以下是.h文件
以下是.m文件
|
![]() |
20
1
我强烈建议使用自动检测文本中的URL并将其转换为链接的库。 尝试:
两者都是麻省理工学院的许可证。 |
![]() |
21
1
根据Charles Gamble的回答,我使用了以下方法(我删除了一些让我困惑的行,并给了我错误的索引):
|
![]() |
22
1
这里的_是一个尽可能少的快速实现,还包括触摸反馈。Caveats:
.
|
![]() |
23
1
这个通用方法也可以工作!
你可以用
|
![]() |
24
1
我找到了另一个解决方案: 我找到了一种方法,可以检测从Internet上找到的HTML文本中的链接,并将其转换为nsattributeString,方法是:
我的方法允许您检测超链接,而不必指定它们。
然后,在视图控制器中,您创建了一个URL和范围列表,以存储所有链接以及属性文本包含的范围:
要查找URL和urlrange,可以使用:
然后执行句柄tap:
我们走! 我希望这个解决方案能帮助你,就像它能帮助我一样。 |
![]() |
25
0
标签 SWIFT2.0
我从Nalexn的答案中得到灵感,我决定自己写一个uilabel的包装纸。
希望您能欣赏此代码,欢迎您提出任何建议!
|
![]() |
26
0
将解决方案作为类别放到
|
![]() |
27
0
Here
我的答案是基于@luca davanzo的
answer
重写
|
![]() |
28
0
|
![]() |
29
-2
|
![]() |
Sagar Chauhan · 反转时间标签 7 年前 |
![]() |
Chi Long Qua · 在后续调用中传播的以前的属性 7 年前 |
![]() |
devforfu · NSAttribute字符串项目符号列表问题 7 年前 |