Swift 3 - 如何在实际ViewController的变量中将UISwitch的当前值存储在UITableViewCell中?

时间:2017-02-21 23:24:09

标签: ios swift

我有一个出现在UITableViewCell中的UISwitch,以及功能&它的值存储在它的类中。现在,当切换更改时,它会在我的UITableViewCell类中调用一个函数,但是从该函数中,我实际上无法更改它出现的viewcontroller上的变量,这就是我需要做的。

我想要做的是,当切换更改时,根据开关的值更改变量trueOrFalse(在viewcontroller上)。但我无法从自定义tableviewcell类访问变量trueOrFalse,这是在交换机更改值时调用函数的位置。

有没有人对如何做到这一点有任何想法?任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:3)

我头顶的两个选项:

  1. 在自定义单元格类中,为" parentViewController"添加属性。并在您的cellForRow方法中,将视图控制器分配给该属性。

  2. 让您的手机发出通知,并让您的视图控制器进行观察。

答案 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编写的,但是你得到了图片。