ios - 以编程方式将点击手势添加到 UILabel

标签 ios uilabel swift4 uitapgesturerecognizer programmatically-created

我正在尝试在 swift 4 的函数中为动态创建的 UILabel 添加点击手势,但它没有触发 UITapGestureRecognizer 函数。当我从 viewDidLoad 函数添加点击手势时它正在工作,但我必须从其他函数添加点击手势。

这里是代码

    override func viewDidLoad() {

    super.viewDidLoad()

    createLabel()
    }

   func createLabel() {

   let label = UILabel()
   label.text = "abc"
   label.numberOfLines = 0 
   label.frame.size.width = self.otherlinksStack.bounds.width
   label.font = label.font.withSize(17) // my UIFont extension

   label.sizeToFit()
   label.tag = 1
   self.otherlinksStack.addSubview(label)
   let labelTapGesture = UITapGestureRecognizer(target:self,action:#selector(self.doSomethingOnTap))

 label.isUserInteractionEnabled = true

 label.addGestureRecognizer(labelTapGesture)

 }

 @objc func doSomethingOnTap() {

    print("tapped")
}

最佳答案

你做错了几件事......

// your code
label.frame.size.width = self.otherlinksStack.bounds.width
label.sizeToFit()

如果您要将标签添加到 stackView,则无需设置其框架——让 stack view 处理它。如果您的 stackView 的对齐方式设置为 .fill,它无论如何都会将标签拉伸(stretch)到它的宽度。如果它设置为填充,标签将根据其文本按需要水平扩展。因此,也无需调用 .sizeToFit()

// your code
self.otherlinksStack.addSubview(label)

将 View 添加到堆栈 View 时,使用.addArrangedSubview,否则它将被添加到堆栈 View 中另一个 View 的顶部。

这应该可以正常工作(在我的快速测试中确实如此):

func createLabel() {

    let label = UILabel()

    label.text = "abc"
    label.numberOfLines = 0
    label.font = label.font.withSize(17) // my UIFont extension
    label.tag = 1

    // give the label a background color so we can see it
    label.backgroundColor = .cyan

    // enable user interaction on the label
    label.isUserInteractionEnabled = true

    // add the label as an Arranged Subview to the stack view
    self.otherlinksStack.addArrangedSubview(label)

    // create the gesture recognizer
    let labelTapGesture = UITapGestureRecognizer(target:self,action:#selector(self.doSomethingOnTap))

    // add it to the label
    label.addGestureRecognizer(labelTapGesture)

}

@objc func doSomethingOnTap() {
    print("tapped")
}

关于ios - 以编程方式将点击手势添加到 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54690219/

相关文章:

ios - 试图理解一个简单的陈述

ios - 从共享扩展中检索 imageURL

core-animation - CATextLayer 包裹 sizeToFit?

swift - 遇到线程 1 : EXC_BAD_ACCESS (code=2) when using custom segue

ios - ScrollView 不工作 iOS Swift

ios - 在 UIGestureRecognizer 中双击

ios - 在 Swift 中为 UILabel 设置特定的字体粗细

swift:增加 TableViewCell 高度取决于 UILabel 而不使用约束

ios - 打开数组中包含的类型

ios - 如何使用 SwiftyJson 在 1 NSObject 中初始化 json 中的多个字典