Swift:如何访问仅使用一个函数以编程方式创建的多个UI开关

Swift:如何访问仅使用一个函数以编程方式创建的多个UI开关,swift,uiswitch,Swift,Uiswitch,我创建了一个表,其中每行上都有一个名称和一个UISwitch按钮。行数不是固定的(因此UISwitch的数量也不是固定的),它取决于用户条目。 我已设法为每个UISwitch提供了一个标记,但我不知道如何从@IBAction func访问它们 代码 您可以使用开关更改的操作中的sender.tag来访问标记属性。为此,您需要管理可变数组或可变字典 假设我们使用可变字典,它存储值如下 @{ @"1" : 1 , @"5" : 1 , @"8" : 1 , } 在本例中,我们有

我创建了一个表,其中每行上都有一个名称和一个UISwitch按钮。行数不是固定的(因此UISwitch的数量也不是固定的),它取决于用户条目。 我已设法为每个UISwitch提供了一个标记,但我不知道如何从@IBAction func访问它们

代码


您可以使用
开关更改的
操作中的
sender.tag
来访问标记属性。

为此,您需要管理可变
数组
或可变
字典

假设我们使用可变字典,它存储值如下

@{ 
   @"1" : 1 ,
   @"5" : 1 ,
   @"8" : 1 ,
}
在本例中,我们有3个开关处于打开状态,分别位于索引1、5和8处

假设用户点击索引6的开关, 在这种情况下,将调用“
switchChanged()

在这种方法中,通过使用
sender.tag
获取行的索引,您将获得
Int
值,将其转换为
String
,并检查字典中是否有该索引的值

若该值可用,则表示它以前处于打开状态,现在由用户关闭。所以在本例中,从字典中删除
{,}

若该值不可用,则表示该值以前处于关闭状态,现在由用户打开。所以在本例中,将
{,}
对添加到字典中


func tableView(tableView:UITableView,cellForRowAtIndexPath-indepath:nsindepath)->UITableViewCell
方法中,检查
indepath.row
变量的相同项,然后打开或关闭
UISwitch

我刚从nhgrif的链接中找到的另一篇帖子中发现,“switchChanged:”中缺少的是一个分号


它现在起作用了

这里有一个方法来做这类事情。这个例子是用Objective-C编写的,但是如果你只是阅读它,它应该很容易翻译成Swift,即使你根本不懂Objective-C。
let tag=sender.tag
@{ 
   @"1" : 1 ,
   @"5" : 1 ,
   @"8" : 1 ,
}
switchView.addTarget(self, action: #selector(PIN.switchChanged(_:)),    forControlEvents: UIControlEvents.ValueChanged)