Swift(iOS)でラジオボタンとチェックボックスを作成するにはどうすればよいですか?


85

調査ができるアプリを開発しています。私のレイアウトはXMLベースの質問から生成されます。

ラジオボタン(単一の選択肢)とチェックボックス(複数の回答)を作成する必要があります。スイフトに役立つものは何も見つかりませんでした。

誰かアイデアがありますか?


5
チェックボックス画像またはラジオボタン画像として背景画像を使用して複数のボタンを作成する必要があります...ボタンをクリックして、選択した画像として画像を変更します...つまり、2セットの画像が必要です。1つは選択され、もう1つは選択されてい
ません。– RJV Kumar 2015

2
Xcode / iOSにはチェックボックス/ラジオボタンがないので、私もRJVが提案したものを使用します。
ビスタ2015年

ええ、私はそれを試しました、それは働いています。
バニアン2015年

チェックボックスとラジオボタンにCocoapodsライブラリを使用しようとしましたか?
WimukthiRajapaksha20年

回答:


40

ラジオボタンとチェックボックスの場合、組み込みのものはありません。

チェックボックスは自分で簡単に実装できます。UIControlStateNormalのボタンにはuncheckedImageを設定し、UIControlStateSelectedのcheckedImageを設定できます。タップすると、ボタンの画像が変更され、チェックされている画像とチェックされていない画像が交互に表示されます。

ラジオボタンを使用Arrayするには、ラジオボタンとして動作させたいすべてのボタンを保持する必要があります。ボタンが押されるたびに、アレイ内の他のすべてのボタンのチェックを外す必要があります。

ラジオボタンの場合、SSRadioButtonsControllerを使用 できます。コントローラーオブジェクトを作成し、それにボタン配列を追加できます。

var radioButtonController = SSRadioButtonsController()
radioButtonController.setButtonsArray([button1!,button2!,button3!])

主な原則はここでこのようなものです


153

チェックボックス

Swiftを使用してUIButtonを拡張する独自のCheckBoxコントロールを作成できます。

import UIKit

class CheckBox: UIButton {
    // Images
    let checkedImage = UIImage(named: "ic_check_box")! as UIImage
    let uncheckedImage = UIImage(named: "ic_check_box_outline_blank")! as UIImage
    
    // Bool property
    var isChecked: Bool = false {
        didSet {
            if isChecked == true {
                self.setImage(checkedImage, for: UIControl.State.normal)
            } else {
                self.setImage(uncheckedImage, for: UIControl.State.normal)
            }
        }
    }
        
    override func awakeFromNib() {
        self.addTarget(self, action:#selector(buttonClicked(sender:)), for: UIControl.Event.touchUpInside)
        self.isChecked = false
    }
        
    @objc func buttonClicked(sender: UIButton) {
        if sender == self {
            isChecked = !isChecked
        }
    }
}

そして、それをInterfaceBuilderでビューに追加します。

ここに画像の説明を入力してください

ラジオボタン

ラジオボタンも同様の方法で解決できます。

たとえば、古典的な性別の選択女性-男性

ここに画像の説明を入力してください

import UIKit

class RadioButton: UIButton {
    var alternateButton:Array<RadioButton>?
    
    override func awakeFromNib() {
        self.layer.cornerRadius = 5
        self.layer.borderWidth = 2.0
        self.layer.masksToBounds = true
    }
    
    func unselectAlternateButtons() {
        if alternateButton != nil {
            self.isSelected = true
            
            for aButton:RadioButton in alternateButton! {
                aButton.isSelected = false
            }
        } else {
            toggleButton()
        }
    }
    
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        unselectAlternateButtons()
        super.touchesBegan(touches, with: event)
    }
    
    func toggleButton() {
        self.isSelected = !isSelected
    }
    
    override var isSelected: Bool {
        didSet {
            if isSelected {
                self.layer.borderColor = Color.turquoise.cgColor
            } else {
                self.layer.borderColor = Color.grey_99.cgColor
            }
        }
    }
}

次のようにラジオボタンを初期化できます。

    override func awakeFromNib() {
        self.view.layoutIfNeeded()
        
        womanRadioButton.selected = true
        manRadioButton.selected = false
    }
    
    override func viewDidLoad() {
        womanRadioButton?.alternateButton = [manRadioButton!]
        manRadioButton?.alternateButton = [womanRadioButton!]
    }

それが役に立てば幸い。


1
Swift 3の場合、buttonClickedメソッドをfunc buttonClicked(_ sender:UIButton)に変更する必要があります
hilzj 2016

1
最初の実行では、チェックボックスが付いた画像が表示されません...クリックした後にのみ表示されます...助けてください
H Raval 2016

2
こんにちは@Niteshは、パブリックboolプロパティisCheckedを使用してCheckedステータスを取得できます。例:if myCheckbox.isChecked {...}
crubio 2016

1
@ Jerland2コードが表示されない理由がわかりません。ブールisCheckedは画像に接続されているため、何か他のものが必要です。
crubio 2017

1
@amorenewまだインターフェイスビルダーで表示する方法を探している場合は、私の答えを参照してください。
MahendraLiya20年

22

DLRadioButtonをチェックしてください。InterfaceBuilderから直接ラジオボタンを追加およびカスタマイズできます。また、Swift完璧に動作します。

iOS用のSwiftラジオボタン

更新:バージョン1.3.2に四角いボタンが追加され、パフォーマンスも向上しました。

更新:バージョン1.4.4に複数選択オプションが追加されました。チェックボックスとしても使用できます。

更新:バージョン1.4.7はRTL言語のサポートを追加しました。


ボタンをチェックボックスとして使用する方法がわかりませんか?ラジオボタンしかない?
dleviathan 2016

1
チェックボックスとしてそれを使用するには、設定することができますmultipleSelectionEnablediconSquareしますYES
David Liu

1
ちょっと@DavidLiu私はあなたのライブラリを迅速な1.2に実装するのに苦労しています。私はIosアプリを初めて使用しますが、ReadMe.mdはいくつかの基本的な手順をスキップしていますか?私はとても混乱しています!
ミラップ2016年

1
@milap問題を送信して、サンプルコードを出すことはできますか?
David Liu

@DavidLiuフレームワークをEmbeddedBinariesに追加するだけで、動作するようになりました。超初心者のためにそのステップを追加したいかもしれません!
ミラップ2016年

11

Swift 5、アニメーション付きチェックボックス

ボタンの出口を作成します

@IBOutlet weak var checkBoxOutlet:UIButton!{
        didSet{
            checkBoxOutlet.setImage(UIImage(named:"unchecked"), for: .normal)
            checkBoxOutlet.setImage(UIImage(named:"checked"), for: .selected)
        }
    }

UIButtonの拡張機能を作成します

extension UIButton {
    //MARK:- Animate check mark
    func checkboxAnimation(closure: @escaping () -> Void){
        guard let image = self.imageView else {return}
        
        UIView.animate(withDuration: 0.1, delay: 0.1, options: .curveLinear, animations: {
            image.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
            
        }) { (success) in
            UIView.animate(withDuration: 0.1, delay: 0, options: .curveLinear, animations: {
                self.isSelected = !self.isSelected
                //to-do
                closure()
                image.transform = .identity
            }, completion: nil)
        }
        
    }
}

使い方

 @IBAction func checkbox(_ sender: UIButton){
        sender.checkboxAnimation {
            print("I'm done")
            //here you can also track the Checked, UnChecked state with sender.isSelected
            print(sender.isSelected)
            
        }
}

チェックボックスとラジオボタンの例を確認して くださいhttps://github.com/rashidlatif55/CheckBoxAndRadioButton


2
これはもっと投票する価値があると思います。エレガントなソリューションをありがとう。
カルロ

ボタンを選択すると青い四角が表示されます。どのように私はそれを円形にすることができます
ダヌ

1
@danuで円を描くには、この行を追加できます。ボタンが選択されたときにdidSet checkBoxOutlet.layer.cornerRadius = checkBoxOutlet.frame.height / 2青を削除するには、tintこれらの行を拡張子で追加できます self.adjustsImageWhenHighlighted = false self.isHighlighted = false
RashidLatif20年

1
@danu私が作成した例とあなたのための例、そして私の答えにリンクを提供します。あなたはそれで遊ぶことができます
RashidLatif20年

これは間違いなく答える票まで以上に値する感謝@RashidLatif
ダヌ

9

これに使用できる本当に素晴らしいライブラリがあります(実際には代わりにこれを使用できますUISwitch):https//github.com/Boris-Em/BEMCheckBox

セットアップは簡単です:

BEMCheckBox *myCheckBox = [[BEMCheckBox alloc] initWithFrame:CGRectMake(0, 0, 50, 50)];
[self.view addSubview:myCheckBox];

円と正方形のタイプのチェックボックスを提供します

ここに画像の説明を入力してください

また、アニメーションも実行します。

ここに画像の説明を入力してください


4

非常にシンプルなチェックボックスコントロール。

 @IBAction func btn_box(sender: UIButton) {
    if (btn_box.selected == true)
    {
        btn_box.setBackgroundImage(UIImage(named: "box"), forState: UIControlState.Normal)

            btn_box.selected = false;
    }
    else
    {
        btn_box.setBackgroundImage(UIImage(named: "checkBox"), forState: UIControlState.Normal)

        btn_box.selected = true;
    }
}

4

短いiosswift 4バージョン:

@IBAction func checkBoxBtnTapped(_ sender: UIButton) {
        if checkBoxBtn.isSelected {
            checkBoxBtn.setBackgroundImage(#imageLiteral(resourceName: "ic_signup_unchecked"), for: .normal)
        } else {
            checkBoxBtn.setBackgroundImage(#imageLiteral(resourceName: "ic_signup_checked"), for:.normal)
        }
        checkBoxBtn.isSelected = !checkBoxBtn.isSelected
    }

1
この答えは単純で、少ないコードで同じ結果を達成します!1
ジュリアンシルヴェストリ

4

サードパーティのライブラリを使用しないSwift4.2のラジオボタンのソリューション

RadioButtonController.swiftファイルを作成し、その中に次のコードを配置します。

import UIKit

class RadioButtonController: NSObject {
    var buttonsArray: [UIButton]! {
        didSet {
            for b in buttonsArray {
                b.setImage(UIImage(named: "radio_off"), for: .normal)
                b.setImage(UIImage(named: "radio_on"), for: .selected)
            }
        }
    }
    var selectedButton: UIButton?
    var defaultButton: UIButton = UIButton() {
        didSet {
            buttonArrayUpdated(buttonSelected: self.defaultButton)
        }
    }

    func buttonArrayUpdated(buttonSelected: UIButton) {
        for b in buttonsArray {
            if b == buttonSelected {
                selectedButton = b
                b.isSelected = true
            } else {
                b.isSelected = false
            }
        }
    }
}

ビューコントローラファイルで以下のように使用します。

import UIKit

class CheckoutVC: UIViewController {

    @IBOutlet weak var btnPaytm: UIButton!
    @IBOutlet weak var btnOnline: UIButton!
    @IBOutlet weak var btnCOD: UIButton!

    let radioController: RadioButtonController = RadioButtonController()

    override func viewDidLoad() {
        super.viewDidLoad()

        radioController.buttonsArray = [btnPaytm,btnCOD,btnOnline]
        radioController.defaultButton = btnPaytm
    }

    @IBAction func btnPaytmAction(_ sender: UIButton) {
        radioController.buttonArrayUpdated(buttonSelected: sender)
    }

    @IBAction func btnOnlineAction(_ sender: UIButton) {
        radioController.buttonArrayUpdated(buttonSelected: sender)
    }

    @IBAction func btnCodAction(_ sender: UIButton) {
        radioController.buttonArrayUpdated(buttonSelected: sender)
    }
}

アセットにradio_offおよびradio_onイメージを必ず追加してください。

画像上のラジオ ラジオオフ画像

結果:

ラジオボタンの結果


1
きちんとした再利用可能なソリューション。ありがとう!
rakappdev20年

正確!!! これはもっと大げさな答えでした。うちRadioButtonControllerインスタンス、私はのタグチェックアウト使用selectedButtonが選択されているものを区別するために。ありがとう!
RandikaVishman20年

2

ラジオボタンを作成する手順

BasicStep:2つのボタンを取ります。選択済みと未選択の両方の画像を設定します。両方のボタンにアクションを追加するよりも。今すぐコードを開始します

1)変数を作成します:

var btnTag    : Int = 0

2)ViewDidLoadで定義:

 btnTag = btnSelected.tag

3)選択したタップアクションで:

 @IBAction func btnSelectedTapped(sender: AnyObject) {
    btnTag = 1
    if btnTag == 1 {
      btnSelected.setImage(UIImage(named: "icon_radioSelected"), forState: .Normal)
      btnUnSelected.setImage(UIImage(named: "icon_radioUnSelected"), forState: .Normal)
     btnTag = 0
    }
}

4)UnCheckボタンのコードを実行します

 @IBAction func btnUnSelectedTapped(sender: AnyObject) {
    btnTag = 1
    if btnTag == 1 {
        btnUnSelected.setImage(UIImage(named: "icon_radioSelected"), forState: .Normal)
        btnSelected.setImage(UIImage(named: "icon_radioUnSelected"), forState: .Normal)
        btnTag = 0
    }
}

ラジオボタンの準備ができました


2

チェックボックスの場合、UIButtonをサブクラス化する必要はありません。これisSelectedを処理するプロパティがすでにあります。

checkbox = UIButton.init(type: .custom)
checkbox.setImage(UIImage.init(named: "iconCheckboxOutlined"), for: .normal)
checkbox.setImage(UIImage.init(named: "iconCheckboxFilled"), for: .selected)
checkbox.addTarget(self, action: #selector(self.toggleCheckboxSelection), for: .touchUpInside)

次に、アクションメソッドでそのisSelected状態を切り替えます。

@objc func toggleCheckboxSelection() {
    checkbox.isSelected = !checkbox.isSelected
}

1

UIButtonをサブクラス化して、ニーズに合わせて独自の描画コードを作成するだけです。次のコードを使用して、Androidのようなラジオボタンを実装しました。ストーリーボードでも使用できます。Githubリポジトリの例を参照してください

import UIKit

@IBDesignable
class SPRadioButton: UIButton {

@IBInspectable
var gap:CGFloat = 8 {
    didSet {
        self.setNeedsDisplay()
    }
}

@IBInspectable
var btnColor: UIColor = UIColor.green{
    didSet{
        self.setNeedsDisplay()
    }
}

@IBInspectable
var isOn: Bool = true{
    didSet{
        self.setNeedsDisplay()
    }
}

override func draw(_ rect: CGRect) {
    self.contentMode = .scaleAspectFill
    drawCircles(rect: rect)
}


//MARK:- Draw inner and outer circles
func drawCircles(rect: CGRect){
    var path = UIBezierPath()
    path = UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: rect.width, height: rect.height))

    let circleLayer = CAShapeLayer()
    circleLayer.path = path.cgPath
    circleLayer.lineWidth = 3
    circleLayer.strokeColor = btnColor.cgColor
    circleLayer.fillColor = UIColor.white.cgColor
    layer.addSublayer(circleLayer)

    if isOn {
        let innerCircleLayer = CAShapeLayer()
        let rectForInnerCircle = CGRect(x: gap, y: gap, width: rect.width - 2 * gap, height: rect.height - 2 * gap)
        innerCircleLayer.path = UIBezierPath(ovalIn: rectForInnerCircle).cgPath
        innerCircleLayer.fillColor = btnColor.cgColor
        layer.addSublayer(innerCircleLayer)
    }
    self.layer.shouldRasterize =  true
    self.layer.rasterizationScale = UIScreen.main.nativeScale
}

/*
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    isOn = !isOn
    self.setNeedsDisplay()
}
*/    

override func awakeFromNib() {
    super.awakeFromNib()
    addTarget(self, action: #selector(buttonClicked(sender:)), for: UIControl.Event.touchUpInside)
    isOn = false
}

@objc func buttonClicked(sender: UIButton) {
    if sender == self {
        isOn = !isOn
        setNeedsDisplay()
    }
}
}

1

作業中のMacアプリケーションでこれを処理するための非常に単純なクラスを作成しました。うまくいけば、これは誰かに役立つ

RadioButtonControllerクラス:

class RadioButtonController: NSObject {

var buttonArray : [NSButton] = []
var currentleySelectedButton : NSButton?
var defaultButton : NSButton = NSButton() {
    didSet {
        buttonArrayUpdated(buttonSelected: self.defaultButton)
    }
}

func buttonArrayUpdated(buttonSelected : NSButton) {
    for button in buttonArray {
        if button == buttonSelected {
            currentleySelectedButton = button
            button.state = .on
        } else {
            button.state = .off
        }
    }
}

}

View Controllerでの実装:

class OnboardingDefaultLaunchConfiguration: NSViewController {

let radioButtonController : RadioButtonController = RadioButtonController()
@IBOutlet weak var firstRadioButton: NSButton!
@IBOutlet weak var secondRadioButton: NSButton!

@IBAction func folderRadioButtonSelected(_ sender: Any) {
    radioButtonController.buttonArrayUpdated(buttonSelected: folderGroupRadioButton)
}

@IBAction func fileListRadioButtonSelected(_ sender: Any) {
    radioButtonController.buttonArrayUpdated(buttonSelected: fileListRadioButton)
}

override func viewDidLoad() {
    super.viewDidLoad()
    radioButtonController.buttonArray = [firstRadioButton, secondRadioButton]
    radioButtonController.defaultButton = firstRadioButton
}

}

0
  1. 「はい」と「いいえ」の2つのボタンを作成します。
  2. BOOLプロパティを作成します例:isNRICitizen = false
  3. 両方のボタンに同じボタン接続を与え、タグを設定します(例:はいボタン-タグ10およびいいえボタン-タグ20)
@IBAction func btnAction(_ sender:UIButton) {

isNRICitizen = sender.tag == 10 ? true : false
isNRICitizen ? self.nriCitizenBtnYes.setImage(#imageLiteral(resourceName: "radioChecked"), for: .normal) : self.nriCitizenBtnYes.setImage(#imageLiteral(resourceName: "radioUnchecked"), for: .normal)
        isNRICitizen ? self.nriCitizenBtnNo.setImage(#imageLiteral(resourceName: "radioUnchecked"), for: .normal) : self.nriCitizenBtnNo.setImage(#imageLiteral(resourceName: "radioChecked"), for: .normal)
}

0

チェックボックスの場合、実際にはUITableViewCellアクセサリの形式の組み込みソリューションがあります。フォームをUITableViewとして設定し、各セルを選択可能なオプションとして使用accessoryTypeして、選択したアイテムのチェックマークを設定できます。

擬似コードの例を次に示します。

    let items = [SelectableItem]

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        // Get the item for the current row
        let item = self.items[indexPath.row]

        // ...dequeue and set up the `cell` as you wish...

        // Use accessoryType property to mark the row as checked or not...
        cell.accessoryType = item.selected ? .checkmark : .none
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        // Unselect row
        tableView.deselectRow(at: indexPath, animated: false)

        // Toggle selection
        let item = self.items[indexPath.row]
        item.selected = !item.selected
        tableView.reloadData()
    }

ただし、ラジオボタンにはカスタム実装が必要です。他の回答を参照してください。


0

チェックボックスボタンをオンにするかオフにするかの決定は、ビューの範囲外です。ビュー自体は、要素の内部状態を決定するのではなく、要素の描画のみを処理する必要があります。私が提案する実装​​は次のとおりです。

import UIKit

class Checkbox: UIButton {

    let checkedImage = UIImage(named: "checked")
    let uncheckedImage = UIImage(named: "uncheked")
    var action: ((Bool) -> Void)? = nil

    private(set) var isChecked: Bool = false {
        didSet{
            self.setImage(
                self.isChecked ? self.checkedImage : self.uncheckedImage,
                for: .normal
            )
        }
    }

    override func awakeFromNib() {
        self.addTarget(
            self,
            action:#selector(buttonClicked(sender:)),
            for: .touchUpInside
        )
        self.isChecked = false
    }

    @objc func buttonClicked(sender: UIButton) {
        if sender == self {
            self.action?(!self.isChecked)
        }
    }

    func update(checked: Bool) {
        self.isChecked = checked
    }
}

InterfaceBuilderで使用することもプログラムで使用することもできます。ビューの使用法は、次の例のようになります。

let checkbox_field = Checkbox(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
checkbox_field.action = { [weak checkbox_field] checked in
    // any further checks and business logic could be done here
    checkbox_field?.update(checked: checked)
}

0

Swift 5.0 Swift用のシンプルなラジオボタンを更新(ライブラリなし)

最初に画像を[1つチェック]ボタンと[2番目チェックなし]ボタンに設定します。

次に、RadioButtonの2つのアウトレットを提供します。

@IBOutlet weak var radioMale: UIButton!
@IBOutlet weak var radioFemale: UIButton!

1つのメソッドで両方のボタンアクションを使用してIBActionを作成します。

 @IBAction func btnRadioTapped(_ sender: UIButton) {

    radioMale.setImage(UIImage(named: "Unchecked"), for: .normal)
    radioFemale.setImage(UIImage(named: "Unchecked"), for: .normal)

    if sender.currentImage == UIImage(named: "Unchecked"){

        sender.setImage(UIImage(named: "Checked"), for: .normal)

    }else{

        sender.setImage(UIImage(named: "Unchecked"), for: .normal)
    }

}

0

コメントするのに十分な評判がないので、SalilDwahanのバージョンをここに残しておきます。Swift 5、XCode11.3で動作します。

まず、ボタンをIBに配置し、タイプ「カスタム」を選択して、アシスタントレイアウト(Ctrl+ドラッグ)を使用してコンセントとアクションを作成します。次のコードを含めると、次のように終了するはずです。

class YourViewController: UIViewController {
    @IBOutlet weak var checkbox: UIButton!
    @IBAction func checkboxTapped(_ sender: UIButton) {
        checkbox.isSelected = !checkbox.isSelected
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        checkbox.setImage(UIImage.init(named: "checkMark"), for: .selected)
    }
}

アセットに画像を追加し、それに合わせて名前を変更することを忘れないでください!

checkbox.isSelected チェックする方法です


0

一部の回答では、選択状態を使用してボタンの選択状態の画像を設定できると正しく述べていますが、ボタンに画像とテキストの両方が必要な場合は、エレガントに機能しません。

多くの人と同じように、私はUIButtonをサブクラス化することで終了しました。ただし、InterfaceBuilderからの画像設定のサポートが追加されました。

以下は私のコードです:

import UIKit

class CustomCheckbox: UIButton {

    @IBInspectable var defaultStateImage: UIImage? = nil {
        didSet{
            self.setNeedsDisplay()
        }
    }

    @IBInspectable var selectedStateImage: UIImage? = nil {
        didSet{
            self.setNeedsDisplay()
        }
    }

    @IBInspectable var gapPadding: CGFloat = 0 {
        didSet{
            self.setNeedsDisplay()
        }
    }

    @IBInspectable var isChecked: Bool = false {
        didSet{
            self.setNeedsDisplay()
        }
    }

    var defaultImageView: UIImageView? = nil
    var selectedImageView: UIImageView? = nil

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    override func layoutSubviews() {
        super.layoutSubviews()
        setup()
    }

    func setup() {
        if(defaultStateImage != nil) {
            defaultImageView = UIImageView(image: defaultStateImage)
            defaultImageView?.translatesAutoresizingMaskIntoConstraints = false

            addSubview(defaultImageView!)

            let length = CGFloat(16)
            titleEdgeInsets.left += length

            NSLayoutConstraint.activate([
                defaultImageView!.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: -gapPadding),
                defaultImageView!.centerYAnchor.constraint(equalTo: self.titleLabel!.centerYAnchor, constant: 0),
                defaultImageView!.widthAnchor.constraint(equalToConstant: length),
                defaultImageView!.heightAnchor.constraint(equalToConstant: length)
            ])
        }

        if(selectedStateImage != nil) {
            selectedImageView = UIImageView(image: selectedStateImage)
            selectedImageView!.translatesAutoresizingMaskIntoConstraints = false

            addSubview(selectedImageView!)

            let length = CGFloat(16)
            titleEdgeInsets.left += length

            NSLayoutConstraint.activate([
                selectedImageView!.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: -gapPadding),
                selectedImageView!.centerYAnchor.constraint(equalTo: self.titleLabel!.centerYAnchor, constant: 0),
                selectedImageView!.widthAnchor.constraint(equalToConstant: length),
                selectedImageView!.heightAnchor.constraint(equalToConstant: length)
            ])
        }

        if defaultImageView != nil {
            defaultImageView!.isHidden = isChecked
        }

        if selectedImageView != nil  {
            selectedImageView!.isHidden = !isChecked
        }

        self.addTarget(self, action: #selector(checkChanged(_:)), for: .touchUpInside)
    }

    @objc func checkChanged(_ btn : UIButton){
        self.isChecked = !self.isChecked

        if defaultImageView != nil {
            defaultImageView!.isHidden = isChecked
        }

        if selectedImageView != nil  {
            selectedImageView!.isHidden = !isChecked
        }
    }
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.