備忘録として。参考になったとしたら幸いです。
##できるもの
どれか一つだけを選択させたい時。他の選択肢をタップしたらそれまで選択されていたもののチェックが外れるようなものを作りたいなんかに。
##使う知識
###isSelected
UIButtonにはisSelected
というBool型のプロパティがあります。(推されているかいないかの状態を表す。)
ボタンを押す時にそのisSelected
を反対にするには@IBActionの中に
radio1Button.isSelected = !radio1Button.isSelected
とすることで状態を変えることができます。
そして、その時他のボタンが選択されているつまりisSelected
がtrueならばfalseにすれば良いので
if radio2Button.isSelected {
radio2Button.isSelected = !radio2Button.isSelected
}
のようにします。
radio2Button.isSelected = false
でもOK
これを選択肢の数だけ行うことでラジオボタンを実装することができます。
###setImage
UIButtonのsetImage
メソッドにはforという引数名があります。
radio1Button.setImage(uncheckedImage, for: .normal)
これは上述したisSelected
と密接に関わっていて、normal
が選択されていない時、selected
が選択された時の状態を表します。
なのでsetImage
の際にそれぞれの状態に応じた画像を決めることで、視覚的に選択されているのかどうかを表現することができます。
ex)normalにはハート、.selectedには塗りつぶされたハートを設定するなど
radio1Button.setImage(uncheckedImage, for: .normal)
radio2Button.setImage(uncheckedImage, for: .normal
機能そのものは
##ソースコード
override func viewDidLoad() {
super.viewDidLoad()
radio1Button.setImage(uncheckedImage, for: .normal)
radio2Button.setImage(uncheckedImage, for: .normal
}
@IBAction func radio1Button(_ sender: Any) {
radio1Button.isSelected = !radio1Button.isSelected
reportString = "スパム/宣伝目的"
if radio2Button.isSelected {
radio2Button.isSelected = !radio2Button.isSelected
}
if radio3Button.isSelected {
radio3Button.isSelected = !radio3Button.isSelected
}
if radio4Button.isSelected {
radio4Button.isSelected = !radio4Button.isSelected
}
if radio5Button.isSelected {
radio5Button.isSelected = !radio5Button.isSelected
}
if radio1Button.isSelected || radio2Button.isSelected || radio3Button.isSelected || radio4Button.isSelected || radio5Button.isSelected {
submitButton.isEnabled = true
submitButton.setTitleColor(UIColor.black, for: .normal)
} else {
submitButton.isEnabled = false
submitButton.setTitleColor(UIColor.gray, for: .normal)
}
}