gpt4 book ai didi

ios - 区分在自定义UIView中点击了哪个按钮

转载 作者:搜寻专家 更新时间:2023-11-01 07:09:45 25 4
gpt4 key购买 nike

我有一个继承自 UIView 的自定义类,其中有一个 UIImageView 和按钮。我将它们作为 UIView 添加到我的 Storyboard 中,假设有两个 View 。我有一个委托(delegate)和一个在按下按钮时执行的函数,它适用于两个 UIView。

我的问题是我不知道如何判断点击了哪个。我需要将它传递给另一个 VC,然后在被单击的 UIView 中显示合适的图像。我一直在考虑设置 id 或其他东西,但它似乎不是一个非常可扩展的想法。而且我不能简单地添加 @IBAction,因为 View 是 UIView 作为一个整体。

在 ViewController 中,我将它们添加为 @IBOutlets:

@IBOutlet weak var view: CustomImageView!
@IBOutlet weak var view2: CustomImageView!

编辑:我非常接近于创建可重用和可扩展的解决方案——我只是将标签分配给每个对象,而不是传递和检索它。我遇到的问题是我想访问标签的属性。我没有找到任何解决方法。

最佳答案

委托(delegate)解决方案您可以为自定义 View 添加自定义委托(delegate)协议(protocol)

protocol CustomViewDelegate {
func didSelectCustomView(_ view: CustomView)
}

class CustomView: UIView {
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var myButton: UIButton!

weak var delegate: CustomViewDelegate?

@IBAction func buttonPressed(sender: UIButton) {
delegate?.didSelectCustomView(self)
}
}

并且在您的 ViewController 中,您必须检查委托(delegate)调用来自哪个 View :

class ViewController: UIViewController {
@IBOutlet weak var view1: CustomView!
@IBOutlet weak var view2: CustomView!

override func viewDidLoad() {
super.viewDidLoad()

view1.delegate = self;
view2.delegate = self;
}
}

extension ViewController: CustomViewDelegate {
func didSelectCustomView(_ view: CustomView) {
if view == view1 {
// view1 clicked
} else {
// view2 clicked
}
}
}

block 解决方案您可以添加一个可选 block ,而不是委托(delegate),如果单击 View 中的按钮,该 block 将执行:

class CustomView: UIView {
@IBOutlet weak var myImageView: UIImageView!
@IBOutlet weak var myButton: UIButton!

var clicked: ((CustomView) -> Void)?

@IBAction func buttonPressed(sender: UIButton) {
clicked?(self)
}
}

在您的 ViewController 中,您可以将 block 添加到您的 View 中:

class ViewController: UIViewController {
@IBOutlet weak var view1: CustomView!
@IBOutlet weak var view2: CustomView!

override func viewDidLoad() {
super.viewDidLoad()

view1.clicked = { view in

}

view2.clicked = { view in

}
}
}

关于ios - 区分在自定义UIView中点击了哪个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45664067/

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