Cell中添加Switch组件如何执行不同的函数

2018-02-27 11:08:35来源:https://juejin.im/post/5a92923af265da4e9f6fc425作者:稀土掘金人点击

分享

OneSwift - iOS Tips Based On Swift


Switch 组件频繁使用于用户设置、自定义等场景,当 Switch 组件只有一个时,它的数据绑定、函数绑定和状态切换都相对简单,只需要对一个 Switch 进行操作即可。





但是,当我们在 TableView 和 CollectionView 中复用多个 Switch 时,就需要一个更好的方式去同时实现多个数据绑定、函数绑定和状态切换。


在这里先说明一下:


数据绑定是指需要判断当前 Switch 的初始值状态;函数绑定是指点击不同的 Switch 执行不同的函数; 状态切换是指点击之后我们需要改变 Switch 的状态;


下面以 CollectionView 中使用多个 Switch 为例,进行实践演练。


1.创建 Switch 组件


创建 Switch 组件,设置 identify 为 CellSwitch





2.区分与标识 Switch


通过在 cellForItemAt 中设置 Switch 的不同 tag 值,来区分 Switch 这里我以


cell.CellSwitch.tag = indexPath.row

3. Switch 初始化状态加载


在 cellForItemAt 中加载 Switch 的各种颜色和当前状态。 当然要明确不同的 indexPath.row 对应什么值,对应的 Switch 加载不同的初始状态,以OneClock自定义设置中的三个值为例,我调用 coredata 的值进行了初始化状态的加载。


switch indexPath.row {
case 0:
print("indexpath",indexPath.row)
if self.appDelegate.mytheme.timeFormat == Int64(0){
cell.CellSwitch.isOn = true
}else{
cell.CellSwitch.isOn = false
}
case 1:
print("indexpath",indexPath.row)
if self.appDelegate.mytheme.showFormat == Int64(0){
cell.CellSwitch.isOn = true
}else{
cell.CellSwitch.isOn = false
}
case 2:
print("indexpath",indexPath.row)
if self.appDelegate.mytheme.oneClickMenu == Int64(0){
cell.CellSwitch.isOn = true
}else{
cell.CellSwitch.isOn = false
}
default:
print("default")
}

4. Switch 函数绑定


同样在 cellForItemAt 中加载 Switch 的函数 self.switchAction(_ :) ,代码如下:


cell.CellSwitch.addTarget(self, action: #selector(self.switchAction(_ :)), for: .touchUpInside)

当然,这里的核心是 self.switchAction(_ :) 函数本身,刚刚我们已经给每个 Switch 加了 tag ,因此在这个函数中,我们就只需要判断 tag 值进行不同的函数操作即可。


@objc func switchAction(_ sender: UISwitch){
switch sender.tag {
case 0:
print("indexpath",sender.tag)
if self.appDelegate.mytheme.timeFormat == Int64(0){
self.appDelegate.mytheme.timeFormat = Int64(1)
}else{
self.appDelegate.mytheme.timeFormat = Int64(0)
}
case 1:
print("indexpath",sender.tag)
if self.appDelegate.mytheme.showFormat == Int64(0){
self.appDelegate.mytheme.showFormat = Int64(1)
}else{
self.appDelegate.mytheme.showFormat = Int64(0)
}
case 2:
print("indexpath",sender.tag)
if self.appDelegate.mytheme.oneClickMenu == Int64(0){
self.appDelegate.mytheme.oneClickMenu = Int64(1)
}else{
self.appDelegate.mytheme.oneClickMenu = Int64(0)
}
default:
print("default")
}
}

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台