Help us understand the problem. What is going on with this article?

SwiftでUIButtonを動的に生成しクリックされたボタンを判別する方法

More than 5 years have passed since last update.

SwiftでUIButtonを動的に生成しクリックされたボタンを判別する方法です。

UIButtonを継承したクラスを作って実現しています。
もっとスマートな方法があれば教えてほしいです。

ソース

ViewController.swift

import UIKit

class ViewController: UIViewController {

    // UIButtonを継承した独自クラス
    class MyButton: UIButton{
        let x:Int
        let y:Int
        init(x:Int,y:Int,frame:CGRect){
            self.x = x
            self.y = y
            super.init(frame:frame)
        }
        required init(coder aDecoder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
    }

    //メイン
    override func viewDidLoad() {
        super.viewDidLoad()
        for x in 0...5{
            for y in 0...5{
            //位置を変えながらボタンを作る
                var btn : UIButton = MyButton(
                    x:x,
                    y:y,
                    frame:CGRectMake(CGFloat(x)*30,CGFloat(y)*30,20,20))
            //ボタンを押したときの動作
            btn.addTarget(self, action: "pushed:", forControlEvents: .TouchUpInside)
            //見える用に赤くした
            btn.backgroundColor = UIColor.redColor()
            //画面に追加
            view.addSubview(btn)
            }
        }
    }

    //ボタンが押されたときの動作
    func pushed(mybtn : MyButton){
        //押されたボタンごとに結果が異なる
        println("button at (\(mybtn.x),\(mybtn.y)) is pushed")
    }
}

実行結果

画面スナップショット

hoge.png

左上から右下に順番にボタンを押すと以下のようになる

button at (0,0) is pushed
button at (1,1) is pushed
button at (2,2) is pushed
button at (3,3) is pushed
button at (4,4) is pushed
button at (5,5) is pushed
fetaro
データエンジニア
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away