2015-08-30 2 views
2

У меня есть контроллер, у меня есть 10 кнопок. Каждая кнопка имеет тег, и все кнопки вызывают одно и то же действие (разделяемое переключателем (sender.tag), case 0 -> case 9, чтобы различать, какая кнопка выбрана). Я сделал с IB, подключил все кнопки (@IBOutlet) к тому же @IBAction и все хорошо. Но теперь я хочу сделать это программно, без IB.Несколько кнопок для одного действия без IB

Так что я удалил @IBOutlet «S и @IBAction создавать новые кнопки (let myButton1 = UIBUtton()) и новое действие (func newAction(sender: UIButton)). Я попробовал addTarget: с тем же селектором для всех новых кнопок, но приложение выйдет из строя.

У кого-нибудь есть идея исправить это, пожалуйста?

+1

'target' должно быть' self' и 'action' должно быть' 'newAction:" '. Обратите внимание на двоеточие. – vacawama

+0

Все хорошо, как это, спасибо! – TheBlueTurtle

ответ

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) 
+0

Это действительно работает! Спасибо за Ваш быстрый ответ ! – TheBlueTurtle

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) 
     } 

    } 
} 
Смежные вопросы