我正在尝试做一些应该非常简单的事情,但由于我对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
}
}
答案 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
}
}
如果同时移动单元格以获取最新的索引路径,则将单元格传回可能很有用。