没有 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
,右侧的标签值设置为1
。 enum
是所有标签,因此您可以拥有任意数量的按钮。确保 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)
}
}
}
在我的视图控制器中,我有 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
,右侧的标签值设置为1
。 enum
是所有标签,因此您可以拥有任意数量的按钮。确保 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)
}
}
}