繁体   English   中英

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

[英]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,这是在开关更改值时调用该函数的地方。

是否有人对此有任何想法? 任何帮助将非常感激。

我的头上有两个选择:

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

  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
}

设置一个协议,使您的单元可以将其用户操作(如切换开关)通知其委托人。

让您的视图控制器遵守该协议。 在您的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM