Swift

Swift:UIButtonをコードだけで実装するメモ!addTargetの使い方!


今回はUIButtonをコードだけで実装します。

UIButtonをコードだけで実装するとなると、
心配なことがあります!

それは、
『IBActionを使えない』
ということです。

@IBAction func button(_ sender: Any) {
    }

この{}内にUIButtonがタップされた際の処理を書きよすよね。

でもコードだけで実装する場合、
RUNしなければUIButtonは出てきません!
なのでコードとStoryBoard上のUIを結びつける動きはできないのです。。。

それらを解決するのが
『addTarget』です!

addTargetとは??

addTargetとは、
イベントを追加するメソッドです。

こちらを参考に作成させていただきます。感謝。
002 UIButtonでボタンを表示 · GitBook

 

import UIKit

class ViewController: UIViewController{


    override func viewDidLoad() {
        super.viewDidLoad()

        let button = UIButton()
        // これを追加した
        
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
    }
   
}

まずはこんな感じにしましょう

UIButtonのインスタンス化

let button = UIButton()

はUIButtonのインスタンスを作成します。

UIButtonのサイズと座標

このように指定します。

button.frame = CGRect(x: 100, y: 100, width: 100, height: 100)

x座標、y座標、width(横幅)、height(高さ)
をいっぺんに指定します。
注意しなければならないのは
(x = 0,y = 0)は左上になるということです。

中学生の頃に習った数学で言う所の『原点』が それです。
f:id:jumprails3303:20161124215756p:plain

UIButtonのbackgroundColorの指定

 

button.backgroundColor = UIColor.blue

とこのように指定します。
UIColorの後ろに色を指定します。

UIButtonのテキスト

このままだと、
ボタンに全く文字がないので文字をつけましょう。

button.setTitle("カレー愛してる", for: .normal)

setTitleの第一引数に文字を入れます。””で括るのがミソです。
第二引数の.normalはボタンの通常時を指しています。
通常時があるということは、そうじゃない時もあります。今回は省きます。

ここでRUNしてみてください。
おそらく真っさらな画面だと思います。
それを解決するのが、
『addSubview』!!!!

UIButtonをaddSubviewで表示

view.addSubview(button)

これは
ViewControllerのViewに実際に表示するメソッドです。引数に表示させたいものを入れます。(今回はbutton)

これをすることによってRUNした時に表示されます。

RUNしてみてください。
表示されましたか?

UIButtonにイベントを追加:addTarget

ようやくたどり着いました。
『addTarget』です!

button.addTarget(self, action: #selector(ViewController.changeColor(sender: )), for: .touchUpInside)

これを追加しましょう。

actionに追加したいイベントを記述します。
今回はchangeColorというイベントを追加しました。
viewDidLoadにこれを足してください。

func changeColor(sender: Any) { // buttonの色を変化させるメソッド
        button.backgroundColor = UIColor.darkGray
    }

タップすると色がdarkGrayに変化します。darkGrayを選択する自分のセンスに脱帽です。おされ。
button.addTarget(self, action: #selector(ViewController.changeColor(sender: )), for: .touchUpInside)

これのforの.touchUpInsideは、
『buttonの内側をタップした時にイベントが発動しますよ』
と指定してます。

最終的にはこうなります。

import UIKit

class ViewController: UIViewController{
    
    let button = UIButton()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        
        button.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
        // ボタンの設置座標とサイズを設定する.


        button.backgroundColor = UIColor.cyan
        // buttonのbackgroundcolorを指定


        button.setTitle("カレー愛してる", for: .normal)
        // 通常時のbuttonの文字を指定

        
        button.addTarget(self, action: #selector(ViewController.changeColor(sender: )), for: .touchUpInside)
        // buttonにイベントを追加
        
        
        view.addSubview(button)
        // 実際にviewに表示する
        
        
        
    }
    
    @objc func changeColor(sender: Any) { // buttonの色を変化させるメソッド
        button.backgroundColor = UIColor.darkGray
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        
    }
    
}

 


ABOUT ME
ささお
3年目iOSエンジニア。 スタートアップで働いておりやす。 プログラミングスクールとエンジニアのキャリアを考えたい。 作ったアプリ - https://apps.apple.com/us/app/loverprofile/id1463563845?l=ja&ls=1