Ios Swift自定义按钮类

Ios Swift自定义按钮类,ios,swift,swift3,Ios,Swift,Swift3,我试图创建一个自定义类来创建一个按钮。我在类中的按钮中添加目标时遇到问题。这是我的密码 class SelectButton{ var button:UIButton = UIButton() init(button_frame: CGRect, button_title: String, connected: [UIButton]?){ self.button.frame = button_frame self

我试图创建一个自定义类来创建一个按钮。我在类中的按钮中添加目标时遇到问题。这是我的密码

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)

当有人点击按钮时,通常您希望在应用程序中的其他地方发生某些事情(例如在某个视图控制器或其他UI元素中)。iAction现在的设置方式是,当有人点击按钮时,按钮本身会触发或发生某些事情。如果希望以编程方式处理按钮点击,而不是按ctrl键将按钮拖动到视图控制器中,如果愿意,可以这样做。首先,将以下代码添加到视图控制器中:

 @IBAction func buttonPressed(sender: UIButton) {

}
 myButton.addTarget(self, action:self.buttonPressed(sender), for: .touchUpInside)
然后,您可以通过将此方法添加到视图控制器中,以编程方式添加选择器:

 @IBAction func buttonPressed(sender: UIButton) {

}
 myButton.addTarget(self, action:self.buttonPressed(sender), for: .touchUpInside)
或者转到“连接检查器”,从“内部润色”拖动到视图控制器代码中的iAction点。另外,正如其他人在评论中指出的,您应该通过将以下内容添加到类声明中,使您的按钮从UIButton继承:

 class SelectButton: UIButton {
   . . .
 }

没有任何内容包含对
SelectButton
实例的强引用,因此一旦创建
test
的函数退出,该实例就会被释放

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


对于
test
,您需要使用实例属性而不是局部变量,或者最好让
SelectButton
直接从
UIButton

继承,您是如何使用此类的?显示代码。为什么不将
UIButton
子类化?我编辑了我的问题,因为我认为这比将
UIButton
子类化要好,因为没有任何东西对您的
SelectButton
实例有很强的引用,所以一旦创建
test
的函数退出,该实例就会被释放。按钮本身被保留,因为您已将其添加为子视图,因此它仍然可见,但不再有对象响应该操作。确实
SelectButton
应该子类
UIButton
,然后您可以添加
SelectButton
作为子视图。是的,您是对的。子类化
ui按钮
解决了它。谢谢