单选
2018-04-27 本文已影响7人
海到尽头天为岸
需求:在一堆选项中选出某一个,并作出标记,其它已选的设为正常。
根据不同的业务场景这样的需求可以采用UICollectionView、UItableView、或直接拖控件(代码)。
1、代码或拖控件的一些技巧:
使用一个背景View来承载各个可选择的子View。
如下:
image.png
单独使用一个背景View方便后面整体操作。
@IBAction func clickSelectEvent(_ sender: UIButton) { //所有按钮的点击事件都指向该方法
sender.isSelected = !sender.isSelected
if sender.isSelected == false {
return
}
sender.backgroundColor = UIColor.colorWithHex("E96858", alpha: 0.9) //按钮选中的背景色
selectString = sender.titleLabel?.text ?? "" //把选择的内容传递出去
guard let btns = sender.superview?.subviews else {return} //此处就是使用背景View的好处,保证遍历的时候只遍历需要遍历的内容
for btn in btns {
if btn != sender && btn is UIButton && (btn as! UIButton).isSelected { //主要作用是去除其他已点击按钮的状态
(btn as! UIButton).isSelected = false
(btn as! UIButton).backgroundColor = UIColor.white
}
}
}
效果如下:
image.png
2、一些规则的选择性控件可以使用UItableView和UICollectionView来实现。
如下以一个tableView的需求为例:
image.png
使用UItableView和UICollectionView实现的方式比较统一。可以使用系统自带的机制解决问题。
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
if self.isSelected {
self.selectIm.isHidden = false
} else {
self.selectIm.isHidden = true
}
}
通过Cell的选中和非选中来标识我们的业务需求。
另外初始化的默认选中方式为:
tableView.selectRow(at: indexPath, animated: true, scrollPosition: .bottom)
这样就需求实现了。我们获取选择的内容只需要去点击的代理方法拿就OK了。
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
selectString = listArray[indexPath.row]
}