1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

viewWithTagで簡単に対象オブジェクトを呼び出して処理できる。

Posted at

Swift初心者です。
こういうケースを想定してみてください

  • ボタン(UIButton)がmain.storyboardにボタンA〜ボタンHまで8個配置されている
  • ボタンAを押されたらボタンC,E,Gに対する動作を指定する
  • ボタンBを押されたらボタンD,F,Hに対する動作を指定する

Swift初心者の私はこう書きました。
どうも、UIButton型の配列を作るのがうまくできなかったので、まずはボタンC〜Hを操作できるよう、ViewController.swift上で変数を宣言しました。

    @IBOutlet weak var btnC: UIButton!
    @IBOutlet weak var btnD: UIButton!
    @IBOutlet weak var btnE: UIButton!
    @IBOutlet weak var btnF: UIButton!
    @IBOutlet weak var btnG: UIButton!
    @IBOutlet weak var btnH: UIButton!

そのうえで、


@IBAction func play(sender :UIButton){ 
  switch sender.tag {
    case 1:
     btnC.imageView?.startAnimating()
     btnE.imageView?.startAnimating()
     btnG.imageView?.startAnimating()
    default:
     btnD.imageView?.startAnimating()
     btnF.imageView?.startAnimating()
     btnH.imageView?.startAnimating()

といったコードを書いていきました・・・

もっといい方法があるんだろうな、と思いながら書いていましたが、もちろんありました。
viewクラスの中にあるviewWithTagというメソッド。

let button = self.view.viewWithTag(tag) as! UIButton

main.storyboard上に、Viewというエリアがあり、ここにタグを入れられることは知ってました。
スクリーンショット 2020-07-20 23.42.30.png

このタグの番号を持つボタンを取得してくれるというメソッドが、viewWithTagメソッド。
これを使えば、掲題の課題は下記のようにして記述ができる

    @IBAction func play(sender :UIButton){
        play(tag: sender.tag)
    }
    
    @IBAction func playThreeOdd(sender: UIButton) {
        play(tag: 1)
        play(tag: 3)
        play(tag: 5)
    }
    
    @IBAction func playThreeEven(sender: UIButton) {
        play(tag: 2)
        play(tag: 4)
        play(tag: 6)
    }

としてあげれば、あとはplayメソッドの引数をtag番号にして、viewWithTagメソッドでそのボタンを取得し、操作を書いてあげるだけ。

    func play(tag: Int){
        let button = self.view.viewWithTag(tag) as! UIButton
        button.imageView?.startAnimating()
    }
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?