使用自定义单元格中的UISwitch设置对象属性

时间:2016-09-13 01:21:23

标签: swift uiswitch

我正在尝试做一些应该非常简单的事情,但由于我对Swift缺乏经验,我遇到了问题。

我有一个ViewController,里面有TableView个自定义单元格,这些单元格是从一组对象(称为allListItems)填充的。这些对象是使用Realm Model Object创建的,我使用的是{而不是Core Data,我认为可能是相关的。每个自定义单元格中都有一个UISwitch,理想情况下我想设置它,以便当用户切换UISwitch时,它会修改isSelected的布尔indexPath.row属性。 1}},然后将该对象追加到一个名为selectedListItems的单独数组中。

我通过SO,Tuts +和AppCoda进行的所有搜索都显示我应该在这里使用协议 - 委托模式,我的协议在我的自定义单元类中,而我的委托在我的ViewController类中。在一天的大部分时间里,我都没有运气,但是,我认为这可能是因为数组是Realm Model Objects。

正如我所提到的,我对Swift和一般的编程都很陌生,因此非常感谢ELI5的回复!提前谢谢!

供参考,这是我的自定义单元格:

import UIKit

class AllListItemsTableViewCell: UITableViewCell {

    @IBOutlet var toggleIsSelected: UISwitch!
    @IBOutlet var listItemLabel: UILabel!

  override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
}

1 个答案:

答案 0 :(得分:0)

使用回调而不是建议的协议/委托模式 这在Swift中很容易。

在表格视图中,单元格声明一个带闭包的可选变量

var callback : ((UITableViewCell, Bool) -> Void)?

并在IBAction中为交换机调用

@IBAction func switchChanged(sender : UISwitch) {
    callback?(self, sender.on)
}

cellForRowAtIndexPath设置回调

cell.callback = { (tableViewCell, switchState) in
  if let indexPath = self.tableView.indexPathForCell(tableViewCell) {
    // do something with index path and switch state
  }
}

如果同时移动单元格以获取最新的索引路径,则将单元格传回可能很有用。