我正在尝试在Swift 4中创建一个UIButton但是当我尝试调用addTarget函数时,我在“MyView”类中不断收到“Expected declaration”错误。我在其他类中完成了相同的代码,并且从未遇到过错误。我错过了什么吗?感谢。
import Foundation
import UIKit
protocol MyDelegate: class {
func onButtonTapped()
}
class OtherViewController: UIViewController {
}
class MyViewController: UIViewController, MyDelegate {
func onButtonTapped() {
let nextViewController = OtherViewController()
navigationController?.pushViewController(nextViewController, animated: false)
}
var myView: MyView!
override func viewDidLoad() {
super.viewDidLoad()
myView.delegate = self
}
}
class MyView: UIView {
weak var delegate: MyDelegate?
let button = UIButton()
button.addTarget(self, action: #selector(buttonTapped),for: .touchUpInside)
func buttonTapped() {
self.delegate?.onButtonTapped()
}
}
答案 0 :(得分:0)
你不能addTarget或调用类空间中的任何方法,这个空间用于声明,如错误所示。
要解决此问题,您可以执行此操作
let button:UIButton =
{
let btn = UIButton()
btn.addTarget(self, action: #selector(buttonTapped),for: .touchUpInside)
return btn
}()
或
let button:UIButton = UIButton()
override init(frame: CGRect) {
super.init(frame: frame)
button.addTarget(self, action: #selector(buttonTapped),for: .touchUpInside)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
在这两种情况下,您必须将@objc注释添加到buttonTapped函数,因为选择器必须引用@objc函数。
所以它会像这样
@objc func buttonTapped(){}
此外,您需要将此按钮添加到视图中,以便将其绘制到屏幕上。
view.addSubView(button)