我有一个出现在UITableViewCell中的UISwitch,以及功能&它的值存储在它的类中。现在,当切换更改时,它会在我的UITableViewCell类中调用一个函数,但是从该函数中,我实际上无法更改它出现的viewcontroller上的变量,这就是我需要做的。
我想要做的是,当切换更改时,根据开关的值更改变量trueOrFalse(在viewcontroller上)。但我无法从自定义tableviewcell类访问变量trueOrFalse,这是在交换机更改值时调用函数的位置。
有没有人对如何做到这一点有任何想法?任何帮助将不胜感激。
答案 0 :(得分:3)
我头顶的两个选项:
在自定义单元格类中,为" parentViewController"添加属性。并在您的cellForRow方法中,将视图控制器分配给该属性。
让您的手机发出通知,并让您的视图控制器进行观察。
答案 1 :(得分:2)
实际上并没有那么糟糕。在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
}
答案 2 :(得分:0)
设置一个协议,让您的单元格通知其代表有关切换开关等用户操作。
让您的视图控制器符合该协议。在您的cellForRow(at :)方法中,将单元格的委托属性设置为视图控制器。
您可以让单元格在其委托方法中将自身作为sender属性发送,然后向表视图询问发送该消息的单元格的indexPath。
答案 3 :(得分:-1)
我认为您的问题是,您希望了解UITableViewCell
UISwitch
在开启/关闭时属于哪个。
以下是识别交换机所属单元的代码。
- (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编写的,但是你得到了图片。