[英]Swift 3 - How can I store the current value of a UISwitch in a UITableViewCell, in a variable on the actual ViewController?
我有一个出现在UITableViewCell中的UISwitch,它的功能和值存储在其类中。 现在,当更改开关时,它将在我的UITableViewCell类中调用一个函数,但是从该函数中,我实际上无法更改显示在其上的viewcontroller上的变量,这是我需要做的。
我要说的是,更改开关后,根据开关的值更改变量trueOrFalse(在viewcontroller上)。 但是我无法从自定义tableviewcell类访问变量trueOrFalse,这是在开关更改值时调用该函数的地方。
是否有人对此有任何想法? 任何帮助将非常感激。
我的头上有两个选择:
在自定义单元格类中,为“ parentViewController”添加一个属性,并在cellForRow方法中,将视图控制器分配给该属性。
让您的单元格发出通知,并让您的视图控制器对其进行观察。
实际上还不错。 在cellForRowAt中,设置开关的目标:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "switchCell", for: indexPath) as! SwitchContainingTableViewCell
cell.mySwitch.addTarget(self, action: #selector(switchChanged(_:)), for: .valueChanged)
return cell
}
func switchChanged(_ mySwitch: UISwitch) {
self.value = mySwitch.isOn
// Do something
}
设置一个协议,使您的单元可以将其用户操作(如切换开关)通知其委托人。
让您的视图控制器遵守该协议。 在您的cellForRow(at :)方法中,将单元的委托属性设置为视图控制器。
您可以让单元在其委托方法中将自身作为发件人属性发送,然后向表视图询问发送消息的单元的indexPath。
我假设您的问题是,您希望知道打开/关闭UISwitch
属于哪个UITableViewCell
。
这是识别开关所属单元的代码。
- (UITableViewCell *)cellContainingSwitch:(UISwitch *)switch{
UITableViewCell *cell = (UITableViewCell *)switch.superview;
while (![cell isKindOfClass:[UITableViewCell class]]) {
cell = (UITableViewCell *)cell.superview;
}
return cell;
}
因此,在您的操作方法中,执行以下操作:
- (IBAction)yourSwitchSwitched:(UISwitch *)sender {
UITableViewCell *cell = [self cellContainingSwitch:sender];
// Then do whatever you want with this cell.
}
不幸的是,我没有使用Swift的经验,所以这段代码是用Objective-C编写的,但是您可以理解。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.