Ios 以编程方式向UILabel添加点击手势

Ios 以编程方式向UILabel添加点击手势,ios,uilabel,swift4,uitapgesturerecognizer,programmatically-created,Ios,Uilabel,Swift4,Uitapgesturerecognizer,Programmatically Created,我试图在swift 4中的函数中为动态创建的UILabel添加点击手势,但它没有启动UIAPTgestureRecognitor函数。当我从viewDidLoad函数添加点击手势时,它可以工作,但我必须从其他函数添加点击手势 这是密码 override func viewDidLoad() { super.viewDidLoad() createLabel() } func createLabel() { let label = UILabel

我试图在swift 4中的函数中为动态创建的UILabel添加点击手势,但它没有启动UIAPTgestureRecognitor函数。当我从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")
}

如果您的手势在viewDidLoad中工作,则在从其他功能添加手势后,该手势可能会被其他控件的手势覆盖


尝试在与所有其他控件分开的控件上添加手势。

如果您的手势在viewDidLoad中工作,则在从其他功能添加手势后,手势可能会被其他控件的手势覆盖

尝试在与所有其他控件分离的控件上添加手势。

func addtapprocess(){
让LabelTap手势=UITapGestureRecognitor(目标:自我,操作:#选择器(doSomethingOnTap))
//添加此行以启用标签上的用户交互
myLabel.isUserInteractionEnabled=true
myLabel.AddGestureRecognitor(LabelTap手势)
}
@objc func doSomethingOnTap(){
打印(“抽头”)
}
然后从
viewDidLoad
调用
addtappiration()
,或者从任何您想要添加点击的函数调用。

func addtappiration(){
让LabelTap手势=UITapGestureRecognitor(目标:自我,操作:#选择器(doSomethingOnTap))
//添加此行以启用标签上的用户交互
myLabel.isUserInteractionEnabled=true
myLabel.AddGestureRecognitor(LabelTap手势)
}
@objc func doSomethingOnTap(){
打印(“抽头”)
}

然后从
viewDidLoad
调用
addtappership()
,或者从您想要添加点击的任何函数调用。

使用以下代码添加点击手势:

let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapGestureMethod(_:)))
tapGesture.numberOfTapsRequired = 1
tapGesture.numberOfTouchesRequired = 1
yourLabel.isUserInteractionEnabled = true
yourLabel.addGestureRecognizer(tapGesture)
这是点击手势方法:

@objc func tapGestureMethod(_ gesture: UITapGestureRecognizer) {
    Do your code here
}

使用以下代码添加轻触手势:

let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapGestureMethod(_:)))
tapGesture.numberOfTapsRequired = 1
tapGesture.numberOfTouchesRequired = 1
yourLabel.isUserInteractionEnabled = true
yourLabel.addGestureRecognizer(tapGesture)
这是点击手势方法:

@objc func tapGestureMethod(_ gesture: UITapGestureRecognizer) {
    Do your code here
}

你做错了几件事

// your code
label.frame.size.width = self.otherlinksStack.bounds.width
label.sizeToFit()
如果要将标签添加到stackView,则无需设置其框架——由stack view处理。如果stackView的对齐方式设置为
.fill
,则标签仍将拉伸至其宽度。如果未设置为“填充”,则标签将根据其文本根据需要水平展开。因此,也无需调用
.sizeToFit()

将视图添加到堆栈视图时,请使用
.addArrangedSubview
,否则将添加到堆栈视图中另一个视图的顶部

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


你做错了几件事

// your code
label.frame.size.width = self.otherlinksStack.bounds.width
label.sizeToFit()
如果要将标签添加到stackView,则无需设置其框架——由stack view处理。如果stackView的对齐方式设置为
.fill
,则标签仍将拉伸至其宽度。如果未设置为“填充”,则标签将根据其文本根据需要水平展开。因此,也无需调用
.sizeToFit()

将视图添加到堆栈视图时,请使用
.addArrangedSubview
,否则将添加到堆栈视图中另一个视图的顶部

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


在问题中添加代码好的,您是否将
userInteractionEnabled
设置为
true
?是的,我将userInteractionEnabled设置为true。但是它不起作用你需要提供更多的信息-请看问题中的代码。我编辑了它。将代码添加到问题中。嗯,你是否将
userInteractionEnabled
设置为
true
?是的,我将userInteractionEnabled设置为true。但是它不起作用你需要提供更多的信息-请看问题中的代码。我编辑了它。不,它不工作。我以编程方式创建UILabel,并在从viewDidLoad调用的函数中添加tap手势。不,它不起作用。我正在以编程方式创建UILabel,并在从viewDidLoad调用的函数中添加tap手势。OP正在创建标签--它可以分开多少?OP正在创建标签--它可以分开多少?