Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21093

[Swift 5] swiftでラジオボタン実装

$
0
0

タイトルの通りです。

縦に配置したいこともあり(あとは見栄え的な問題で)、UISegmentedControlを用いずにラジオボタンを実装したかったのですが、調べても記事が古かったり、初心者の自分には手をつけがたい手法が多かったので、自分が理解できる手法で実装しました。
また、今回のコードでは、ボタンの数が可変的でも対応できるようにしています。

バージョン

xcode: 11.2.1
swift: 5.1.2

準備

ボタンの画像を用意してAdd Fileからプロジェクトに追加します。
チェックボックスのフリー素材は探せばありますが、枠だけの方がないことが多かったので、自分はMac標準のプレビューで描きました。

スクリーンショット 2020-01-02 3.20.42.png

実装

ボタンをクリックしたときのsenderを用いて、ボタンの画像をcheck_on.pngに変えるとともに、ボタンのtagを活用してすでにチェックされているボタンをcheck_off.pngに変えているだけです。(tagを用いずに全てのボタンを一度check_off.pngに変えてもいいのですが)

ViewController.swift
importUIKitclassResultWindow:UIViewController{varNumberOfButtons:Int=5//ボタンの数varCheckedButtonTag=0//チェックされているボタンのタグ//それぞれ画像を読み込むletcheckedImage=UIImage(named:"check_on")!asUIImageletuncheckedImage=UIImage(named:"check_off")!asUIImage//ラジオボタンを配置するfuncset_radiobutton(num:Int){letbutton=UIButton()letcenter=Int(UIScreen.main.bounds.size.width/2)//中央の位置lety=170+45*num//ボタン同士が重ならないようyを調整button.setImage(uncheckedImage,for:UIControl.State.normal)button.addTarget(self,action:#selector(butttonClicked(_:)),for:UIControl.Event.touchUpInside)button.frame=CGRect(x:center-120,y:y,width:40,height:40)button.tag=numself.view.addSubview(button)}//押されたボタンの画像をcheck_on.pngに変える@objcfuncbutttonClicked(_sender:UIButton){ChangeToUnchecked(num:CheckedButtonTag)letbutton=senderbutton.setImage(checkedImage,for:UIControl.State.normal)CheckedButtonTag=button.tag//check_on.pngになっているボタンのtagを更新}//すでにcheck_on.pngになっているボタンの画像をcheck_off.pngに変えるfuncChangeToUnchecked(num:Int){forvinview.subviews{ifletv=vas?UIButton,v.tag==num{v.setImage(uncheckedImage,for:UIControl.State.normal)}}}overridefuncviewDidLoad(){super.viewDidLoad()foriin0..<NumberOfButtons{set_radiobutton(num:i)}}}

コード汚くてすみません、、
スクリーンショット 2020-01-02 3.41.59.png
スクリーンショット 2020-01-02 3.42.03.png

ラベルとかのコードは載せませんでしたがこんな感じでラジオボタンの実装はできると思います。
お粗末様でした。

参考

https://qiita.com/bohebohechan/items/49aa25ed9a24b04619a0


Viewing all articles
Browse latest Browse all 21093

Trending Articles