【问题标题】:Creating a tappable text section inside a UITextView在 UITextView 中创建一个可点击的文本部分
【发布时间】:2017-09-25 20:03:30
【问题描述】:

我有以下问题,我有一个文本视图,上面写着“通过点击“我同意”按钮,我证明我已阅读并同意在线条款和条件”

我想要做的是在“在线条款和条件”部分添加一个点击手势识别器,并在用户点击此文本部分时调用一个方法,如果用户点击文本的任何其他部分没有应该发生。

我该怎么做? (由于我签署了 NDA,我无法发布任何代码):( 我希望我仍然可以得到帮助。

提前致谢。

【问题讨论】:

  • 您可以创建一个不同的 UILabel 并将其作为子视图添加到 UITextView 中,通过这样做,您将能够为调用您想要的方法的整个 UILabel 添加一个手势识别器。但是,如果你想让它在 UITextView 的底部显示,你需要使用 UITextView 委托在 UITextView 的滚动条在底部时显示它。

标签: ios swift uitextview


【解决方案1】:

您可以使用带有标签NSLinkAttributeName 的属性字符串来设置可点击文本的范围。然后在 textView 委托中实现

optional func textView(_ textView: UITextView, shouldInteractWith URL:URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool

请注意,您的文本字段必须是可选择的且不可编辑的。

参考:https://developer.apple.com/reference/uikit/uitextviewdelegate/1649337-textview

在 iOS 10 之前您可以使用:

optional func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool`

参考: https://developer.apple.com/reference/uikit/uitextviewdelegate/1618606-textview

如果您需要同时支持两者,请使用@available api - 将@available(iOS, deprecated: 10.0) 放在iOS 10 之前的版本之前,将@available(iOS 10.0, *) 放在iOS 10 之前的版本之前。这样可以避免编译时错误。

【讨论】:

  • 谢谢,是的,这将是最简单的解决方案,但部署目标是与该方法不兼容的 iOS 9.0。
  • 我已经编辑了我的答案,以便为您提供适合 iOS 10 前目标的方法。
  • 您可以将两者与@available API 一起使用来标记哪个函数对给定目标有效
  • 我实现了您的解决方案,并且我已经得到了正确的范围,但是由于某种原因,当我点击文本时没有调用代理。
  • 您是否将isSelectable 设置为trueisEditable 设置为false
猜你喜欢
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 2015-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多