在swift中获取UITableViewCell内单元格的索引路径

时间:2015-09-21 19:56:04

标签: xcode swift xcode6

任何人都可以告诉我如何在UISwitch的动作函数中更具体地获取其类中的单元格的索引,尤其是uitableViewCell。 我做了以下......

        var cell = sender.superview?.superview as UITableViewCell
        var table: UITableView = cell.superview as UITableView
        let indexPath = table.indexPathForCell(cell)

然后它崩溃了。 解决方案是什么?

2 个答案:

答案 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。

您可以从https://github.com/regnerjr/SimpleCellSwitchAction

结帐整个示例项目