在TableView中按下时更新UISwitch的状态

时间:2015-02-12 18:01:02

标签: ios uitableview swift uiswitch

我有一个需要远程打开/关闭灯光的iOS应用程序。该应用程序从parse.com获取灯光的数据,并构建一个tableview,其中每个单元格显示灯光名称和UISwitch。我想知道当我打开或关闭其中一个灯时,如何更改存储在parse.com上的布尔值。问题是交换机使用的IBAction不是布尔值,我不能写,如果更新灯的值的语句是按下开关。我已经在我的单元类中创建了IBaction,并希望tableviewcontroller类可以使用它。

这是我的tableviewcontroller类的一部分

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

let cell:RelayCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as RelayCell

    let label:PFObject = self.labelArray.objectAtIndex(indexPath.row) as PFObject //create the object label

    cell.relayTextField.text = label.objectForKey("text") as String //put the text in the labeltextField

    if (label.objectForKey("switch") as NSObject == 1) {
        //cell.mySwitch = true    //turn the switch on depending on the boolean value in switchColumn
        cell.mySwitch.setOn(true, animated: true)
    }
    else{
        //cell.mySwitch = false    //turn the switch on depending on the boolean value in switchColumn
        cell.mySwitch.setOn(false, animated: true)
    }
    return cell
}

此代码显示了每个独立开关的状态,但是,我现在想要的是能够按下应用程序上的每个独立按钮并更改在线数据库上的值。

你可以帮助我,因为我还没有在网上找到任何东西。

class RelayCell: UITableViewCell {

@IBOutlet weak var mySwitch: UISwitch!
@IBOutlet weak var relayTextField: UITextField!


override func awakeFromNib() {
    super.awakeFromNib()
    // Initialization code
   relayTextField.layer.borderColor = UIColor.blackColor().CGColor
   relayTextField.layer.borderWidth = 0.8
   relayTextField.layer.cornerRadius = 10
}

  override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    // Configure the view for the selected state
}

 @IBAction func switchChangedState(sender: UISwitch) {
 }

}

这是我的RelayCell类,由tableViewController类中的tableView方法使用。

2 个答案:

答案 0 :(得分:3)

处理此问题的一种方法是向RelayCell添加回调属性并从switchChangedState调用回调:

class RelayCell: UITableViewCell {

    typealias SwitchCallback = (Bool) -> Void
    var switchCallback: SwitchCallback?

    @IBAction func switchChangedState(sender: UISwitch) {
        switchCallback?(sender.on)
    }

    // ... rest of RelayCell
}

tableView:cellForRowAtIndexPath:方法中,设置单元格的回调:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell:RelayCell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as RelayCell

    cell.switchCallback = { [weak self] (switchIsOn) in
        self?.setSwitchValue(switchIsOn, forRowAtIndexPath:indexPath)
        Void()
    }

    // ... rest of tableView:cellForRowAtIndexPath:
    return cell
}

然后你可以在setSwitchValue:forRowAtIndexPath:中做你需要的任何事情,这是你添加到表视图控制器类的方法:

private func setSwitchValue(switchIsOn: Bool, forRowAtIndexPath indexPath: NSIndexPath) {
    println("row \(indexPath.row) switch on-ness is now \(switchIsOn)")
}

答案 1 :(得分:0)

UISwitch已经" on" property,用它来获取当前状态的布尔值。