gpt4 book ai didi

ios - Swift: View Controller 中的自定义 UIButton 类触摸事件未触发?

转载 作者:行者123 更新时间:2023-11-29 05:55:29 30 4
gpt4 key购买 nike

我创建了一个自定义 UIButton 类,如下所示:

class CustomButton: UIButton
{
required init(frame: CGRect, title: String, alignment: NSTextAlignment)
{
super.init(frame: frame)

// Set properties

// self.addTarget(self,
// action: #selector(touchCancel),
// for: .touchUpInside)
}

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

// @objc fileprivate func touchCancel()
// {
// print("TOUCHED")
// }
}

在我的主 UIViewController 中,我有以下实现:

class MainViewController: UIViewController
{
fileprivate var customBtn: CustomButton {
let frame = CGRect(x: 48.0,
y: 177.0,
width: 80.0,
height: 40.0)
let custom = CustomButton(frame: frame,
title: "Test",
alignment: NSTextAlignment.right)
return custom
}

override func viewDidLoad()
{
super.viewDidLoad()

view.addSubView(customBtn)

customBtn.addTarget(self,
action: #selector(touchCancel),
for: .touchUpInside)
}

@objc public func touchCancel()
{
print("TOUCHED")
}
}

但是,在我的主 UIViewController 中向 customBtn 添加目标不会被触发。如带有注释掉代码的 CustomButton 类所示,我可以在其中添加一个目标,该目标确实会被触发。

我只是想知道为什么另一个类中定义的函数不能用于添加为自定义 UIButton 的目标?...或者我的实现可能不正确?

谢谢!

最佳答案

您可能需要一个闭包而不是计算属性

lazy var customBtn: CustomButton = {
let frame = CGRect(x: 48.0, y: 177.0, width: 80.0, height: 40.0)
let custom = CustomButton(frame: frame, title: "Test",alignment: NSTextAlignment.right)
return custom
}()

这里是MainViewController

customBtn.addTarget(self,
action: #selector(touchCancel),
for: .touchUpInside)

您将目标添加到新创建的实例中,而不是添加为 subview 的实例中,这是实现(计算属性)和闭包之间的主要区别

关于ios - Swift: View Controller 中的自定义 UIButton 类触摸事件未触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55212462/

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