Swift:使用静态方法连接静态按钮

时间:2017-03-28 17:20:35

标签: swift

假设我有一个静态按钮成员变量,以及一个处理其点击的静态方法。如何使用方法连接按钮?在这种情况下,我无法弄清楚如何让addTarget工作:

private static let my_button: UIButton = {
    let button = UIButton(type: .system)
    ...
    button.addTarget(???, action: #selector(handleButtonClick), for: .touchUpInside)
    return button
}()

private static func handleButtonClick() {
    ...
}

我可以用UIApplication.shared.keyWindow!.rootViewController代替???吗?

2 个答案:

答案 0 :(得分:1)

详细

xCode 8.2.1,Swift 3

完整样本

import UIKit

class Button:NSObject {

    class func createButton() -> UIButton {
        let button = UIButton(type: .system)
        button.frame = CGRect(x: 40, y: 40, width: 200, height: 40)
        button.setTitle("Text", for: .normal)
        button.addTarget(self, action: #selector(Button.handleButtonClick), for: .touchUpInside)
        return button
    }

    class func handleButtonClick() {
        print("Click")
    }
}


class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        view.addSubview(Button.createButton())
    }
}

结果

enter image description here

答案 1 :(得分:0)

你必须有一个实际的对象 - 你的类的一个实例 - 作为按钮的目标。有可能传递类对象,但这不是它应该如何工作。该按钮基本上要求其目标是继承自NSResponder的对象。