ios - 如何在 swift (iOS) 中创建单选按钮和复选框?

标签 ios xcode swift checkbox radio-button

我正在开发一个允许进行调查的应用程序。我的布局是从基于 XML 的问题生成的。

我需要创建单选按钮(单选)和复选框(多选)。我没有发现任何对 swift 有用的东西。

有没有人有想法?

最佳答案

复选框

您可以使用 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
        }
    }
}

然后使用 Interface Builder 将其添加到您的 View 中:

enter image description here

单选按钮

单选按钮可以用类似的方式解决。

例如,经典的性别选择Woman - Man:

enter image description here

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!]
    }

希望对您有所帮助。

关于ios - 如何在 swift (iOS) 中创建单选按钮和复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29117759/

相关文章:

swift - 在 Swift 中将视频上传到 Amazon S3

swift alamofire 返回值为空

ios - 游戏结束画面 - SpriteKit

iphone - 如何将数据库从一台 iPhone 设备传输到另一台设备并连接到新数据库?

iphone - 替代已弃用的 UITableViewCell setText?

objective-c - 垃圾收集泄漏?脚本桥泄漏?

ios - 如何从表格中删除单元格

ios - 无法从推送通知解析 gcm.notification.data

ios - 需要在所有 UIAlertController 关闭后执行操作

ios - 获取 NSLayoutConstraints 关联 View