我在UITableViewCell中实现UISwitch时遇到了一些麻烦。我的tableViewCell:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
let cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cell")
cell.textLabel?.text = "Hello Magic Switch buyers!"
cell.textLabel?.textColor = UIColor.whiteColor()
cell.backgroundColor = UIColor.clearColor()
lightSwitch = UISwitch(frame: CGRectZero) as UISwitch
lightSwitch.on = false
lightSwitch.addTarget(self, action: "switchTriggered", forControlEvents: .ValueChanged );
cell.accessoryView = lightSwitch
return cell
}
这会创建开关,一切正常,直到函数被调用为止。你通常使用的例如一个按钮,只是使用它的indexPath.row来区分所有的细胞,但由于这是一个辅助观点,我无法让这个工作! switchTriggered函数:
func switchTriggered() {
if lightSwitch.on {
let client:UDPClient = UDPClient(addr: "192.168.1.177", port: 8888)
let (_) = client.send(str: "HIGH" )
print(String(indexPath.row) + " set to high")
} else {
let client:UDPClient = UDPClient(addr: "192.168.1.177", port: 8888)
let (_) = client.send(str: "LOW" )
print(String(indexPath.row) + " set to low")
}
}
该功能不知道哪个lightSwitch被切换以及indexPath是什么..我怎么能解决这个问题?如果它是一个按钮,我可以使用accessoryButtonTappedForRowWithIndexPath
,但事实并非如此。
一些帮助将不胜感激,因为TableViewCells中有关UISwitch的所有信息都在Objective-C中。
非常感谢!
答案 0 :(得分:7)
最简单的解决方案是使用交换机的tag
属性。创建开关时,请指定标签
lightSwitch = UISwitch(frame: CGRectZero) as UISwitch
lightSwitch.tag = 2000
lightSwitch.addTarget(self, action: Selector("switchTriggered:"), forControlEvents: .ValueChanged );
然后修改您的处理程序方法以具有发件人参数
func switchTriggered(sender: AnyObject) {
let switch = sender as! UISwitch
if switch.tag == 2000 {
// It's the lightSwitch
}
}