2016-09-16 12 views
0

私はSwift 3.0を使用しています。私はここまでだが、ボタンがクリックされたときに、それがクラッシュどのように私はプログラムで生成された各ボタンを複数のボタンとアクションをプログラムで作成するにはどうすればよいですか?

let button = UIButton(type: .system) 
@IBOutlet weak var attendanceView: UIView! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    var xvalue = 8; 
    var yvalue = 17; 
    var button = UIButton(); 

    for _ in 0..<5{ 
     for _ in 0..<5{ 
     button = UIButton(frame: CGRect(x: xvalue, y: yvalue, width: 50 , height: 50)) 
     button.backgroundColor = .red() 
     button.addTarget(attendanceView, action: #selector(buttonAction), for: .touchUpInside) 
     self.attendanceView.addSubview(button) 
     xvalue = xvalue + 72; 
     } 
     xvalue=8; 
     yvalue = yvalue + 60; 
    } 
} 

func buttonAction(sender: UIButton!) { 
    button.backgroundColor = UIColor.green() 
} 

を一意の識別子を与えることができ、ボタンの動的なグリッドを生成しようとしています。

+1

してくださいあなたがクラッシュについての質問を投稿する場合、あなたはクラッシュからの完全で正確なエラーメッセージが含まれており、クラッシュの原因となるコードの正確な行を指摘しなければなりません。 – rmaddy

+0

_をiに変更し、button.tag = iを追加します。しかしあなたのタイトルは、あなたがクラッシュしていると言っていることと何が関係していますか?実際の質問は何ですか? – Gruntcakes

答えて

0

ボタンを区別するためにbutton.tagを使用してください。 redUIColorのプロパティですので、UIColor.redにアクセスしてください。だから

for i in 0..<5 { 
    for i in 0..<5 { 
     button = UIButton(frame: CGRect(x: xvalue, y: yvalue, width: 50 , height: 50)) 
     button.backgroundColor = .red 
     button.addTarget(attendanceView, action: #selector(buttonAction), for: .touchUpInside) 
     button.tag = i 
     self.attendanceView.addSubview(button)   
    } 
} 

にループのためにあなたを調整し、buttonAction()使用.tag中:

func buttonAction(sender: UIButton!) { 
    switch (sender.tag){ 
    case 0: 
     //button 0 action 
    case 1: 
     //button 1 action 
    case 2: 
     //button 2 action 
    case 3: 
     //button 3 action 
    case 4: 
     //button 4 action 
    default: 
     //default 
    } 
} 
+1

これは未知のクラッシュと何が関係していますか? 「私」とは何ですか? – rmaddy

+0

OPのコードはコンパイルされていませんが、クラッシュは不明ですか? '私は'私はボタンのIDです –

+0

質問の最後の行(コードの下に)をお読みください。 – rmaddy

0

私の2セント:私は、異なるサイズやデバイスと競合するので、モカのボタンを使用してだと思います。コレクションを使う方が良い タグ属性を使用しているのは正しい方法です。 AWN式のいくつかの並べ替えを使用して、例えば、良好である:

0におけるRの

.. 0におけるCに対する< 10 { .. < 20 { LETタグ= 1 +(R * 30)+ C

このようにして、別のno-ovrlappingタグを持つ必要があります。コールバックで

func buttonAction(sender: UIButton!) { 

    let tag = sender.tag 
    let row = tag % 30 // modulus... 
    let col = tag - row * 30... 

or similar.. 
関連する問題