在我的视图控制器中,我有10个按钮。每个按钮都有一个标签,所有按钮都调用相同的动作(由开关(sender.tag),案例0 - >案例9分开,以区分选择哪个按钮)。
我用IB制作,将所有按钮(@IBOutlet
)连接到同一个@IBAction
,一切都很好。但现在我想以编程方式执行此操作,而不使用IB。
因此,我删除了@IBOutlet
和@IBAction
以创建新按钮(let myButton1 = UIBUtton()
)和新动作(func newAction(sender: UIButton)
)。我为所有新按钮尝试了addTarget:
相同的选择器,但应用程序崩溃了。
任何人都有想法解决它吗?
答案 0 :(得分:4)
这应该有效:
func newAction(sender: UIButton) {
...
}
...
myButton1.addTarget(self, action: "newAction:", forControlEvents: .TouchUpInside)
myButton2.addTarget(self, action: "newAction:", forControlEvents: .TouchUpInside)
myButton3.addTarget(self, action: "newAction:", forControlEvents: .TouchUpInside)
答案 1 :(得分:0)
这就是我所做的。我有两个按钮,一个在左边,一个在右边。我将标记值设置为左侧的0
和右侧的1
。 enum
是所有标签,因此您可以拥有任意数量的按钮。确保将按钮链接到故事板中的同一IBAction
。
class QuestionViewController: UIViewController {
@IBOutlet weak var leftButton: UIButton!
@IBOutlet weak var rightButton: UIButton!
enum ButtonType: Int { case Left = 0, Right }
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func questionAnswered(sender: UIButton) {
switch(ButtonType(rawValue: sender.tag)!){
case .Left:
leftButton.setTitle("left button", forState: UIControlState.Normal)
case .Right:
rightButton.setTitle("right button", forState: UIControlState.Normal)
}
}
}