在Swift 4中以编程方式创建UIButton但收到错误

时间:2018-06-16 17:38:25

标签: swift xcode user-interface uibutton

我正在尝试在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()
    }
}

1 个答案:

答案 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)