带有uibutton.addTarget到UIView的Swift类不起作用

时间:2018-07-17 08:52:40

标签: ios swift uiview uibutton addtarget

我创建了一个具有以下类别的新文件:

import Foundation
import UIKit

var Feld = classFeld()

class classFeld {

     let button = UIButton()

     func createButton() -> UIButton {
         button.frame = CGRect(x: 10, y: 50, width: 200, height: 100)
         button.backgroundColor=UIColor.black
         button.addTarget(self, action: #selector(ButtonPressed(sender:)), for: .touchUpInside)
        return button
    }

    @objc func ButtonPressed(sender: UIButton!) {
        button.backgroundColor=UIColor.red
    }
}

这是我的ViewController:

import UIKit

class ViewController: UIViewController {

   override func viewDidLoad() {
        super.viewDidLoad()
        mainview.addSubview(Feld.createButton())
        self.view.addSubview(mainview)
    }

    var  mainview=UIView()
}

当我启动应用程序时,会创建一个黑色按钮,但是当我单击它时,它不会变成红色。 如果我添加按钮而不是

mainview.addSubview(Feld.createButton())

self.view.addSubview(Feld.createButton())

它起作用并且按钮变成红色。

我可以向我解释为什么吗?如果我将一些内容添加到self.view或子视图中,然后再将其添加到self.view中,应该没有什么区别?

3 个答案:

答案 0 :(得分:2)

因为您需要为其添加一个框架并将其添加到self.view

var mainview = UIView()

答案 1 :(得分:1)

这是因为您只是在初始化UIView而不给它任何框架并将其添加到主视图中。

您还需要在主视图中添加框架。例如:

class ViewController: UIViewController {
   var mainview = UIView()
   override func viewDidLoad() {
        super.viewDidLoad()
        mainview.frame = CGRect(x: 10, y: 50, width: 300, height: 300)
        self.view.addSubview(mainview)
        mainview.addSubview(Feld.createButton())
    }        
}

答案 2 :(得分:1)

这是ViewController类的更改,并且工作正常:

class ViewController: UIViewController {
    var  mainview: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        mainview = UIView(frame: self.view.bounds)
        mainview.addSubview(Feld.createButton())
        self.view.addSubview(mainview)

    }
}