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というエリアがあり、ここにタグを入れられることは知ってました。
このタグの番号を持つボタンを取得してくれるというメソッドが、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()
}