我正在尝试做一些应该非常简单的事情,但由于我对 Swift 缺乏经验,我遇到了问题。
我有一个 ViewController
,其中有一个 TableView
,其中包含由对象数组(称为 allListItems
)填充的自定义单元格。这些对象是使用领域模型对象创建的,我使用的是领域模型对象,而不是我认为可能相关的核心数据。每个自定义单元格中都有一个 UISwitch
,理想情况下我想对其进行设置,以便当用户切换 UISwitch
时,它会修改 bool 值 isSelected
该 indexPath.row
属性,然后将该对象附加到一个名为 selectedListItems
的单独数组。
我对 SO、Tuts+ 和 AppCoda 的所有搜索都表明我应该在此处使用协议(protocol) - 委托(delegate)模式,其中我的协议(protocol)位于我的自定义单元类中,我的委托(delegate)位于我的 ViewController 类中。然而,在大半天的努力之后,我没有任何运气,我认为这可能是由于数组是领域模型对象。
正如我所提到的,我对 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
}
}
最佳答案
使用回调代替建议的协议(protocol)/委托(delegate)模式。
这在 Swift 中非常容易。
在 TableView 单元格中声明一个带有闭包的可选变量
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
}
}
如果单元格同时移动以获得最新的索引路径,则将单元格传回可能会很有用。
关于swift - 在自定义单元格中使用 UISwitch 设置对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460904/