没有IB的一个动作的多个按钮

时间:2015-08-30 18:05:19

标签: swift uibutton action

在我的视图控制器中,我有10个按钮。每个按钮都有一个标签,所有按钮都调用相同的动作(由开关(sender.tag),案例0 - >案例9分开,以区分选择哪个按钮)。 我用IB制作,将所有按钮(@IBOutlet)连接到同一个@IBAction,一切都很好。但现在我想以编程方式执行此操作,而不使用IB。

因此,我删除了@IBOutlet@IBAction以创建新按钮(let myButton1 = UIBUtton())和新动作(func newAction(sender: UIButton))。我为所有新按钮尝试了addTarget:相同的选择器,但应用程序崩溃了。

任何人都有想法解决它吗?

2 个答案:

答案 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和右侧的1enum是所有标签,因此您可以拥有任意数量的按钮。确保将按钮链接到故事板中的同一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)
        }

    }
}