Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift 3-如何将UISwitch的当前值存储在UITableViewCell中,存储在实际ViewController上的变量中?_Ios_Swift - Fatal编程技术网

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

Ios Swift 3-如何将UISwitch的当前值存储在UITableViewCell中,存储在实际ViewController上的变量中?,ios,swift,Ios,Swift,我有一个UISwitch出现在UITableViewCell中,它的函数和值存储在它的类中。现在,当开关被更改时,它调用我的UITableViewCell类中的一个函数,但从该函数中,我实际上无法更改它所显示的viewcontroller上的变量,这正是我需要做的 我想做的是,当开关被更改时,根据开关的值更改变量trueOrFalse(在viewcontroller上)。但是我无法从自定义tableviewcell类访问变量trueOrFalse,当开关更改值时,在该类中调用函数 有人知道怎么做

我有一个UISwitch出现在UITableViewCell中,它的函数和值存储在它的类中。现在,当开关被更改时,它调用我的UITableViewCell类中的一个函数,但从该函数中,我实际上无法更改它所显示的viewcontroller上的变量,这正是我需要做的

我想做的是,当开关被更改时,根据开关的值更改变量trueOrFalse(在viewcontroller上)。但是我无法从自定义tableviewcell类访问变量trueOrFalse,当开关更改值时,在该类中调用函数


有人知道怎么做吗?任何帮助都将不胜感激。

我有两个选择:

  • 在自定义单元格类中,为“parentViewController”添加属性,并在cellForRow方法中,将视图控制器指定给该属性

  • 让您的单元格发出通知,并让您的视图控制器进行观察


  • 我有两个选择:

  • 在自定义单元格类中,为“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
    }
    

    其实没那么糟。在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
    }
    

    我假设您的问题是希望知道当开关打开/关闭时,
    ui开关属于哪个
    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编写的,但您可以理解

    我假设您的问题是希望知道
    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编写的,但您可以理解

    设置一个协议,让您的单元格将用户操作(如切换开关)通知其代理

    让视图控制器符合该协议。在cellForRow(at:)方法中,将单元格的委托属性设置为视图控制器


    您可以让单元格在其委托方法中将自身作为发送者属性发送,然后向表视图询问发送消息的单元格的indexPath。

    设置一个协议,允许您的单元格通知其委托有关用户操作(如切换开关)的信息

    让视图控制器符合该协议。在cellForRow(at:)方法中,将单元格的委托属性设置为视图控制器


    您可以让单元格在其委托方法中将自身作为发送者属性发送,然后向表视图询问发送消息的单元格的indexPath。

    您可以为被调用的函数添加代码吗?您可以为被调用的函数添加代码吗?工作非常完美,非常简单。谢谢工作完美,超级简单化。谢谢