Swift自定义按钮类

时间:2017-06-29 21:42:41

标签: ios swift swift3

我正在尝试创建一个创建按钮的自定义类。我在将一个目标添加到其课程内的该按钮时遇到了问题。这是我的代码

class SelectButton{

        var button:UIButton = UIButton()

        init(button_frame: CGRect, button_title: String, connected: [UIButton]?){
            self.button.frame = button_frame
            self.button.setTitle(button_title, for: UIControlState.normal)
            self.button.addTarget(self, action:#selector(self.buttonPressed), for: .touchUpInside)
        }

        func construct() -> UIButton {
            return self.button
        }

        @objc func buttonPressed() {
            print("Button Clicked")
        }
}

问题是我无法在点击按钮时连接操作。如果它在我的课外使用但不在我的课堂内,则可以使用。

类的用法

let test = SelectButton(button_frame: CGRect(x:50, y:50, width: 250, height:150), button_title: "Test button", connected: nil).construct()
self.view.addSubview(test)

2 个答案:

答案 0 :(得分:0)

当有人点击按钮时,通常您希望在应用程序的其他位置发生某些事情(例如在您的某个视图控制器中或某些其他UI元素中)。 IBAction现在的设置方式,你有它,以便当有人点击它时,某些东西会触发或发生在按钮内。如果您想以编程方式处理按钮而不是按住Ctrl键从按钮拖动到视图控制器中,您可以按照这种方式执行此操作。首先,将此代码添加到视图控制器中:

 @IBAction func buttonPressed(sender: UIButton) {

}

然后,您可以通过将此方法添加到视图控制器中以编程方式添加选择器:

 myButton.addTarget(self, action:self.buttonPressed(sender), for: .touchUpInside)

或者转到连接检查器并从内部触摸拖动到视图控制器代码中的IBAction点。另外,正如其他人在评论中指出的那样,你应该通过将你的按钮添加到你的类声明来使你的按钮继承自UIButton:

 class SelectButton: UIButton {
   . . .
 }

答案 1 :(得分:0)

没有任何内容对您的SelectButton实例有强烈的引用,因此只要创建test的函数退出,该实例就会被释放。

按钮本身会被保留,因为您已将其添加为子视图。因此,它仍然可见,但不再有对象响应该操作。

你需要使用实例属性而不是test的局部变量,或者最好SelectButton直接从UIButton继承