【问题标题】:How to mix in UIButton in UILabel text?如何在 UILabel 文本中混入 UIButton?
【发布时间】:2016-09-08 01:19:57
【问题描述】:

我正在尝试让通知表格单元格具有沿“用户 1 与用户 2 成为朋友”行的标签,其中用户 1 和用户 2 是打开所述用户的个人资料视图的按钮。当文本环绕时会出现问题。示例:

                WANT                              DON'T WANT
|                                      |  |                           |
| "John Doe" became friends with "Jane |  | "John" friends with "Jane"|
| Smith"                               |  |                     "Doe "|
 ^notice how to wraps around               wraps within btn bounds^
  all the way back to left margin                

我非常想要这个 HTML 的 Swift 等价物:<a href=..>Button 1</a> some plain text <a href=..>Button 2</a>。有没有办法我可以做到这一点?

【问题讨论】:

  • 我建议使用“属性文本”来实现此功能,并向属性文本添加一个点击手势识别器,以打开被点击用户的个人资料。

标签: swift uibutton swift2 uilabel


【解决方案1】:

您可以通过使用 UITextView 来实现。 UITextView 检测 url,您可以像这样使用该功能。

您可以为这些可点击值添加虚拟 url 值,然后这些值在 uitextview 中变为可点击。这是示例代码:-

import UIKit

class ViewController: UIViewController, UITextViewDelegate {

  @IBOutlet weak var label: UILabel!
  @IBOutlet weak var textView: UITextView!

  let user01 = "http://www.dummyLinks";
  let user02 = "http://www.dummy.com/privacy";

  override func viewDidLoad() {
      super.viewDidLoad()
      self.textView.delegate = self
      let labelText = "Chathuranga Silva is now Freind with Jason"
      let string = NSMutableAttributedString(string: labelText)
      var textRange = string.mutableString.rangeOfString("Chathuranga Silva")
      string.addAttribute(NSLinkAttributeName, value: user01, range: textRange)
      textRange = string.mutableString.rangeOfString("Jason")
      string.addAttribute(NSLinkAttributeName, value: user02, range: textRange)
      textView.attributedText = string
      // Do any additional setup after loading the view, typically from a nib.
  }

  func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {
      if (URL.absoluteString == user01) {
          print("Selected user01")
      } else if (URL.absoluteString == user02) {
          print("Selected user02")
      }
      return false
  }

  override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
  }
}

【讨论】:

  • 啊,我明白了,我的解释有点笼统,但是,我希望按钮转到不同的视图控制器,而不是实际的网站链接。就像*user1* went to *the park* 一样,user1 打开一个配置文件视图控制器,the park 打开一个不同的视图控制器。有什么方法可以使用 addAttribute 来实现吗?
  • 只在我使用 print 的地方使用 segues
  • 顺便说一句,您不需要提供实际的网络链接,它是一个虚拟的,只需提供一个 url 即可使标签词可点击
猜你喜欢
  • 2015-04-27
  • 2011-09-13
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多