单选

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]
}
上一篇 下一篇

猜你喜欢

热点阅读