任何人都可以告诉我如何在UISwitch的动作函数中更具体地获取其类中的单元格的索引,尤其是uitableViewCell。 我做了以下......
var cell = sender.superview?.superview as UITableViewCell
var table: UITableView = cell.superview as UITableView
let indexPath = table.indexPathForCell(cell)
然后它崩溃了。 解决方案是什么?
答案 0 :(得分:3)
试试这个:
假设UISwitch *cellSwitch
自定义类
cell
个对象
在cellForRowAtIndexPath
:
cell.cellSwitch.tag = indexPath.row
在这个开关的IBAction
中:
let indexPath = NSIndexPath(forRow: sender.tag, inSection: 0)
答案 1 :(得分:0)
您不想知道单元格内部单元格的索引路径。索引路径是UITableViewController的实现细节。单元格应该是一个独立的对象。
您真正想要做的是指定一个动作,以便在您的开关更改时运行。
class MySwitchCell: UITableViewCell {
@IBOutlet weak var switchCellLabel: UILabel!
@IBOutlet weak var mySwitch: UISwitch!
//Declare an action to be run
var action: ((sender: UISwitch) -> Void)?
//then run it
@IBAction func switchAction(sender: UISwitch) {
action?(sender: sender)
}
}
然后在配置单元格时执行操作。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("SwitchCell", forIndexPath: indexPath) as! MySwitchCell
cell.switchCellLabel.text = items[indexPath.row]
cell.mySwitch.on = NSUserDefaults.standardUserDefaults().boolForKey(items[indexPath.row])
cell.action = { [weak self] sender in
if let tableViewController = self {
NSUserDefaults.standardUserDefaults().setBool(sender.on, forKey: tableViewController.items[indexPath.row]) }
}
return cell
}
例如,这个根据该开关的状态在NSUserDefaults中设置一个bool。
结帐整个示例项目