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

Multiple buttons for one action without IB

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

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

有人有解决办法吗?

这应该有效:

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)

这是我所做的。我有两个按钮,一个在左边,一个在右边。我将左侧的标签值设置为0,右侧的标签值设置为1enum 是所有标签,因此您可以拥有任意数量的按钮。确保 link 按钮与故事板中的相同 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)
        }

    }
}