当我发布this question时,我以为我已经解决了我的问题。但是我现在遇到一个新问题,它总是将一个nil单元格传递给UISwitch上的ValueChanged方法。正如我在上一个问题的答案中所建议的,我为我的UITableViewController实现了一个协议来实现,该协议存在于我的自定义单元格视图中:
// Protocol
protocol SwitchValueChangedDelegate {
func switchChanged(cell: PreferenceCell) -> Void
}
// Custom cell class
class PreferenceCell : UITableViewCell {
var delegate : SwitchValueChangedDelegate?
// Class body here...
}
我相信这是有效的,然后我的UITableViewController实现了这个协议:
class PreferencesTableViewController: UITableViewController,
SwitchValueChangedDelegate
{
// Class body here
}
为了符合协议,我实现了所需的方法:
func switchChanged(cell: PreferenceCell) -> Void {
if let indexPath = tableView.indexPathForCell(cell) {
// rest of action code here
}
}
这里的想法是,一旦UISwithc被切换,实现的委托方法应该更新单元格,但是总是传递一个零单元格。我在cellForRowAtIndexPath
中设置委托,然后绑定开关以调用委托方法:
// Cell for row at index path, building the cell...
prefCell.delegate = self
// Create listener for each switch
prefCell.subscribed?.addTarget(self,
action: "switchChanged:",
forControlEvents: UIControlEvents.ValueChanged)
return prefCell
为每个单元格调用此块,为清楚起见,我删除了cellForRowAtIndexPath
的方法签名。
为什么一个零细胞总是被传递?我在这里误解了委托模式吗?