ios - 如何快速一次选择一个复选框?
问题描述
我已经实现了四个复选框。现在,我想一次选择一个复选框,如果选择了其他复选框,我希望同时取消选择它。
这是我尝试过的,但它选择了所有复选框。
@IBAction func checkboxTapped(_ sender:UIButton){
if (sender.isSelected == false){
sender.setImage(UIImage(named: "selected"), for: UIControl.State.normal)
sender.isSelected = true;
} else {
sender.setImage(UIImage(named: "unselected"), for: UIControl.State.normal)
sender.isSelected = false;
}
}
在这里,我为所有复选框提供了相同的 IBAction 连接。
解决方案
首先创建一个设置函数,为按钮状态设置相应的图像。
(下面的所有代码都是在操场上创建的,所以它可能与你的有点不同)
private func setUp(button: UIButton) {
button.setImage(UIImage.init(systemName: "checkmark.circle"), for: .selected)
button.setImage(UIImage.init(systemName: "xmark.circle"), for: .normal)
button.addTarget(self, action: #selector(checkboxTapped), for: .touchUpInside) //Not needed if you use a storyboard
}
然后从viewDidLoad
您的视图控制器中调用它(我的按钮在一个数组中buttons
)
override func viewDidLoad() {
super.viewDidLoad()
buttons.forEach {
setUp(button: $0)
self.view.addSubview($0) //Not needed if you use a storyboard
}
buttons[0].isSelected = true
然后检查您的操作方法,以便正确更新所有按钮
@IBAction func checkboxTapped(_ sender:UIButton){
for button in buttons {
button.isSelected = false
}
sender.isSelected = true
}
如果您不使用数组,则将我的循环替换为对各个按钮的调用
推荐阅读
- java - Android项目中的Gradle错误
- c++ - C++ std::map 内存泄漏
- html - 我想将我的用户限制为 xxx.xx 格式。我是正则表达式的新手,哪个表达式可以做到这一点?
- python - 如何在 Python 中找到 CSV 文件中的最大数据点?
- amazon-web-services - 从 VPC / Lambda 访问 Parameter Store
- node.js - Nodejs - 对一次返回 Promise 的函数进行大量“X”次调用
- html - 如何垂直对齐 div 并添加直角三角形?
- javascript - 无法读取未定义错误的属性“url”,因为我不知道如何处理引用对象中不匹配的“按键”事件
- php - SimpleXMLElement 单个元素中的两个名称空间
- javascript - Redux 使用 compose 订阅