从UITableView上的switch获取indexPath

ACR*_*ACR 3 ios swift

我有一个UITableView设置了自定义单元格.每个单元都有一个开关,每次交换开关时我都需要获取特定单元的indexPath.每次切换交换机时,如何从UITableView返回单元格的indexPath和自定义单元格?

Ban*_*ngs 9

你可以用indexPathForRowAtPoint这样的:

@IBAction func switchChanged(sender: UIControl) {
    let rowPoint = sender.convertPoint(sender.bounds.origin, toView: self.tableView)
    let indexPath = self.tableView.indexPathForRowAtPoint(rowPoint)
    println(indexPath)
}
Run Code Online (Sandbox Code Playgroud)

这是Objective C版本

- (IBAction)toggleSwitch:(id)sender {
     UISwitch *switchInCell = (UISwitch *)sender;
     CGPoint pos = [switchInCell convertPoint:switch.bounds.origin toView:tableView];
     NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:pos];
}
Run Code Online (Sandbox Code Playgroud)

如果要在自定义单元格中获取单元格的indexPath:

// CustomCell.swift
@IBAction func switchChanged(sender: UIControl) {
    let tableView = self.tableView()
    let indexPath = tableView?.indexPathForCell(self) 
    println(indexPath)
}

func tableView() -> UITableView? {
    var tableView = self.superview
    while (tableView != nil && !(tableView is UITableView)) {
        tableView = tableView!.superview
    }

    return tableView as? UITableView
}
Run Code Online (Sandbox Code Playgroud)