带有 UIButton 的 UILabel

Posted

技术标签:

【中文标题】带有 UIButton 的 UILabel【英文标题】:UILabel with UIButtons 【发布时间】:2015-02-04 15:31:30 【问题描述】:

有没有办法让UILabelsUITextViewsUIButtons 一起使用?

示例 1:“这辆 汽车 是黄色的,有 4 个***。”

CarUIButton,可以在句子中的任何位置。

【问题讨论】:

好吧,如果我没记错的话,您希望在UILabels 中添加可点击的文本。更好的方法是使用TTTAttibutedLabel。只需通过链接,您就会知道如何在标签中添加指向特定单词的链接,并在选择这些单词时调用您自己的选择器。 @UtkarshSingh 不错。我会试试这个。 使用UITextView,您可以使用NSAttributedStringNSLinkAttributeName 【参考方案1】:

在您想要的范围内使用带有链接的NSAttributedString,并在TTTAttributedLabel 中显示它们。然后,您可以在点击链接时收到回调。

【讨论】:

我希望 uibuttons 能够调用方法,我不想在 uiwebview 中打开链接。还是您建议我使用链接并使用 uiwebview 委托解析它们? @bruno 是的,有一个自定义链接,如 custom-link://more-data-here,然后在委托调用中检查 url 的方案【参考方案2】:

您可以为标签分配一个 UITapGestureRecognizer 以检测点击:

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTapped:)];
tapGestureRecognizer.numberOfTapsRequired = 1;
[myLabel addGestureRecognizer:tapGestureRecognizer];
myLabel.userInteractionEnabled = YES;

然后在您的“labelTapped:”选择器方法中,您可以使用手势对象计算点击在标签框架内的位置。然后,您必须确定该单词在标签中的位置,并查看触摸是否在该 CGRect 中。

【讨论】:

【参考方案3】:

我已经通过一个使用 UITextView.firstRectForRange 方法的应用程序完成了这项工作。这允许您获取 UITextView 中文本的坐标。

我在文本中使用了按钮和魔法标记。渲染时,我找到了魔术标记并将 UIButtons 放在顶部。例如@"This is the age of the $Train$" 将在标记上放置一个标题为 @"Train" 的按钮。

您还可以使用 RectForRange 将每个标记替换为记录位置的彩色文本。然后使用触摸手势查看是否选择了任何矩形。

【讨论】:

以上是关于带有 UIButton 的 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

带有图像的 MKPinAnnotationView 内的 UIButton

带有动画图像的 UIButton 不显示

以编程方式添加带有自动布局的uibutton

带有渐变层的 UIButton 慢

在带有圆角的 UIButton 中添加底部边框

如何制作带有浮雕背景图像的 UIButton?