2016-08-03 15 views
1

私はいくつかの条件に基づいて動的に追加されている以下のボタンを持っています。今私はすべての追加ボタンの動作をラジオボタンとして変更する必要があります。私は以下のようにbuttonAction方法を設定しているラジオボタンを迅速に動的に作成する方法は?

var posX = 0 
    var posY = 0 

    if trim.contains("0"){ 
     print("contaim 0") 
     let button1 = UIButton(frame: CGRect(x: posX, y: posY, width: 60, height: 20)) 
     button1.setTitleColor(UIColor.blackColor(), forState: .Normal) 
     button1.setTitle("No", forState: .Normal) 
     button1.setImage(UIImage(named: "checkbox untick.png")!, forState: .Normal) 
     button1.addTarget(self, action: #selector(buttonAction), forControlEvents: .TouchUpInside) 
     myStackview.addSubview(button1) 
     posX = 60 
    } 
    if trim.contains("1") { 
     print("contaim 1") 

     let button2 = UIButton(frame: CGRect(x: posX, y: posY, width: 60, height: 20)) 
      button2.setTitleColor(UIColor.blackColor(), forState: .Normal) 
      button2.setTitle("Less", forState: .Normal) 
      button2.setImage(UIImage(named: "checkbox untick.png")!, forState: .Normal) 
      button2.addTarget(self, action: #selector(buttonAction), forControlEvents: .TouchUpInside) 
      myStackview.addSubview(button2) 
      posX = posX + 60 

    } 
    if trim.contains("2"){ 
     print("contaim 2") 

     let button3 = UIButton(frame: CGRect(x: posX, y: posY, width: 60, height: 20)) 
     button3.setTitleColor(UIColor.blackColor(), forState: .Normal) 

     button3.setTitle("Half", forState: .Normal) 
     button3.setImage(UIImage(named: "checkbox untick.png")!, forState: .Normal) 
     button3.addTarget(self, action: #selector(buttonAction), forControlEvents: .TouchUpInside) 
     myStackview.addSubview(button3) 
     posX = posX + 60 
    } 

選択に基づいて、いくつかのアクションを..行うことができるように、私はすべてのUIButtonのタグを作成します

func buttonAction(sender: UIButton!) { 
    print("Button tapped") 
    sender.setImage(UIImage(named: "checkboxredtick.png")!, forState: .Normal) 

} 
+0

ラジオグループとしてすべてのボタンを配列に追加できます。ボタンをクリックすると、タッチしたもの以外のすべてのボタンを選択解除します。 – SolaWing

+0

セレクタメソッドに引数があり、 '#selector(buttonAction(_ :))'を入れます。 – eMKa

+0

あなたはいくつかのサンプルを送ることができますか?@SolaWing –

答えて

3
let buttons = [UIButton]() 
// create button1 
let button1 = UIButton(frame: CGRect(x: posX, y: posY, width: 60, height: 20)) 
button1.setTitleColor(UIColor.blackColor(), forState: .Normal) 
button1.setTitle("No", forState: .Normal) 
button1.setImage(UIImage(named: "checkbox untick.png")!, forState: .Normal) 
// if the selected button cannot be reclick again, you can use .Disabled state 
button1.setImage(UIImage(named: "checkboxredtick.png")!, forState: .Selected) 
button1.addTarget(self, action: #selector(buttonAction), forControlEvents: .TouchUpInside) 
myStackview.addSubview(button1) 
buttons.append(button1) 
// create other buttons and add into buttons ... 

func buttonAction(sender: UIButton!){ 
    for button in buttons { 
     button.selected = false 
    } 
    sender.selected = true 
    // you may need to know which button to trigger some action 
    // let buttonIndex = buttons.indexOf(sender) 
} 
+0

ボタンを使ってメソッドを追加..それは動作していますか?私がそれを追加しようとしているときに、私に追加オプションを与えます。 –

+0

@PradipKumar私は私の答えを更新しました。 – SolaWing

+0

イメージ選択とbtnActionの両方でボタンが選択されていない –

0

をその動作していない言い訳、そして追加例えば、あなたはまた、すべてのボタンを含む配列を作成することができ

button.tag = 0 
button.addTarget(object, action: #selector(YourViewController.buttonAction(_:)), 
      forControlEvents: .TouchUpInside) 


func buttonAction(sender: UIButton!) { 
    let selectedButton = sender as! UIButton 
    print(selectedButton.tag) // here stands the correct button which is pressed 
} 

:あなたのUIButtonは、あなたのButtonActionに送信する

let myButtons = [UIButton]() 
let button1 = UIButton()... 
button1.tag = 0 
myButtons.add(button1) 

そして今、この方法のようにそれを変更:

0はあなたがあなたにそれを追加したのと同じ順序でタグを設定する必要があります//(タグ0となるよう)あなたの最初のボタンである
myButtons[0].setImage(.....) 

myButtons配列。

+0

同様に重要:コピー/貼り付けが不要なタグを作成する方法 – Alexander

+0

タグは配列内のインデックスと同じではありません!それは間違っています。そして、BTW - タグの使用を避けてください! – eMKa

+0

もちろん、手動でタグを設定する必要はありません。 – derdida

関連する問題