如何让一个按钮以编程方式在swift中调用方法?

时间:2017-11-26 15:23:39

标签: swift class func

我希望按钮在按下时滑出屏幕,但代码的一部分(buttonPressed)无效。当buttonPressed方法在类中时,按下按钮时没有任何反应。将方法移到括号之外(在viewDidLoad之前的右侧)并执行代码。但是,它会滑动整个视图而不仅仅是教程窗口。我要么找到一种方法让buttonPressed作为Tutorial类的一个方法,或者找到一种方法让它引用在类中调用的“view”的特定实例。

我是编码新手,对方法很陌生,所以感谢任何帮助!

class Tutorial{
    var label = UILabel()
    var view = UIView()
    var button = UIButton()

    init (text: String){
        view = UIView()
        label = UILabel(frame: CGRect(x: 10, y: 10, width: 180, height: 90))
        button = UIButton(frame: CGRect(x: 50, y: 110, width: 100, height: 30))
        view.backgroundColor = .white
        view.layer.cornerRadius = 15
        view.translatesAutoresizingMaskIntoConstraints = false
        label.textAlignment = .center
        label.text = text
        label.numberOfLines = 10
        label.backgroundColor = .white
        label.textColor = UIColor(red:0.12, green:0.15, blue:0.23, alpha:1.0)
        button.backgroundColor = UIColor(red:0.23, green:0.72, blue:0.44, alpha:1.0)
        button.setTitleColor(.white, for: .normal)
        button.setTitle("Got it!", for: .normal)
        button.layer.cornerRadius = 15
        view.addSubview(label)
        view.addSubview(button)
        button.addTarget(self, action: #selector(buttonPressed), for: UIControlEvents.touchUpInside)
    }
    func setConstraints(height: CGFloat){
        view.centerXAnchor.constraint(equalTo: view.superview!.centerXAnchor).isActive = true
        view.topAnchor.constraint(equalTo: view.superview!.topAnchor, constant: UIScreen.main.bounds.height-300).isActive = true
        view.widthAnchor.constraint(equalToConstant: 200).isActive = true
        view.heightAnchor.constraint(equalToConstant: height).isActive = true
        UIView.animate(withDuration: 0.5, delay: 0.2, options: [], animations: {
            self.view.center.x -= UIScreen.main.bounds.width
        })
    }
    @objc func buttonPressed(){
        print("Pressed")
        UIView.animate(withDuration: 0.5, delay: 0.0, options: [], animations: {
            self.view.center.x -= UIScreen.main.bounds.width
        },
                       completion: { (finished: Bool) in
                        self.view.isHidden = true
        })
    }
}
override func viewDidLoad() {
        super.viewDidLoad()

        let tutorial1 = Tutorial(text: "Click and hold to see the anatomy overlay")
        self.view.addSubview(tutorial1.view)
        tutorial1.setConstraints(height: 150)

1 个答案:

答案 0 :(得分:-1)

尝试使用Interface Builder常量。这是Apple文档。 https://developer.apple.com/documentation/appkit/constants/interface_builder_constants?language=objc 为您的按钮制作IBOutlet和IBAction。