问题描述
当我们以编程方式制作UIButton并为其点击动作添加目标时。 对于选择器,即使我们在一个纯粹的快速项目中工作,我们也需要一个带有“ @objc”引用的函数。
override func viewDidLoad() {
let requiredButton = UIButton(frame: CGRect(x: 100,y: 100,width: 50,height: 30))
self.view.addSubview(requiredButton)
requiredButton.addTarget(self,action: #selector(self.buttonTapAction(sender:)),for: UIControl.Event.touchUpInside)
}
@objc func buttonTapAction(sender:UIButton) {
// button action implementation here
}
有没有“ @objC”引用的方法吗?
解决方法
UIButton是NSObject子类的基础对象,因此它在Objective-c运行时执行,因此您需要告诉Swift将代码公开给Objective-c
参考:https://craiggrummitt.com/2016/09/16/any-vs-anyobject-vs-nsobject-in-swift-3/
,如果您面向 iOS 14+,则可以使用新的 API,无需“@objc”引用:
override func viewDidLoad() {
let requiredButton = UIButton(frame: CGRect(x: 100,y: 100,width: 50,height: 30),primaryAction: .init(handler: { _ in
// button action implementation here
}))
self.view.addSubview(requiredButton)
}
如果您面向 iOS 13+,您可以使用 SwiftUI 和 Button 控件构建 UI。 SwiftUI 目前在内部基于 UIKit,但您可以使用 SwiftUI 快速编写整个应用程序,而无需单个“@objc”引用