我正在尝试创建一个创建按钮的自定义类。我在将一个目标添加到其课程内的该按钮时遇到了问题。这是我的代码
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)
答案 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
继承