gpt4 book ai didi

ios - 通过 View 层次结构传播触摸事件(UIView 内的 UIButton)

转载 作者:行者123 更新时间:2023-11-29 13:57:00 26 4
gpt4 key购买 nike

很确定这是一个简单的问题,仍然无法在 Internet 上找到任何类似的东西——这又是一个相信它不是问题的理由。不管怎样!

我怎样才能put a UIButton inside a UIView并在 View 上添加 UITapGestureRecognizer 调用该 View 中的函数,同时仍然同时执行按钮操作?

我有什么:

  • 点击按钮内部仅执行按钮操作。
  • 在按钮外部点击只会执行 View 功能。

我想要的:

  • 点击按钮内部会同时执行按钮操作和 View 功能。
  • 在按钮外部点击只会执行 View 功能。

更新(我使用的代码):

import UIKit
import AwesomeFramework

class View: UIView {

let button = UIButton()
let awesomeObject = AwesomeFramework.AwesomeObject()

@objc func a(_ sender: Any) {
// never gets called
print("a")
}

init() {
super.init(frame: .zero)

button.translatesAutoresizingMaskIntoConstraints = false
addSubview(button)
NSLayoutConstraint.activate([
button.centerXAnchor.constraint(equalTo: centerXAnchor),
button.centerYAnchor.constraint(equalTo: centerYAnchor),
button.widthAnchor.constraint(equalTo: widthAnchor),
button.heightAnchor.constraint(equalTo: heightAnchor),
])

button.addTarget(awesomeObject, action: #selector(awesomeAction), for: .touchUpInside) // awesomeAction prints "b"

let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(a(_:)))
addGestureRecognizer(gestureRecognizer)
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

}

点击我想要的按钮:

b
a

a
b

我得到:

b

更新:调整了一些限制的示例,例如:

  • 该按钮触发了我无权访问的框架中的操作
  • 实际上有很多按钮和其他点击接收元素。我不想对所有这些都使用 a-function(我也不能,因为某些元素管理它们自己的识别器)

最佳答案

一个按钮可以有多个目标。告诉按钮触发 ab:

button.addTarget(self, action: #selector(a), for: .touchUpInside)
button.addTarget(self, action: #selector(b), for: .touchUpInside)

如果用户将手指放在按钮上,然后在松开之前拖出按钮会怎样?如果您希望它也触发 a 操作,也可以这样做:

button.addTarget(self, action: #selector(a), for: .touchUpOutside)

关于ios - 通过 View 层次结构传播触摸事件(UIView 内的 UIButton),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55051923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com