如何将委托函数转换为IBAction函数

时间:2015-09-21 16:30:26

标签: ios swift uitableview cocoa-touch uikit

我有一个委托功能,可以随时更改UITableViewCell的部分位置:

//On cell tap, expand
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if indexPath.section == 0
    {
        let data = firstDataSource[indexPath.row]

        tableView.beginUpdates()
        secondDataSource.append(data)
        firstDataSource.removeAtIndex(indexPath.row)

        let newIndexPath = NSIndexPath(forRow: find(secondDataSource, data)!, inSection: 1)

        tableView.moveRowAtIndexPath(indexPath, toIndexPath: newIndexPath)
        tableView.endUpdates()
    } else if indexPath.section == 1 {
        let data = secondDataSource[indexPath.row]

        tableView.beginUpdates()
        firstDataSource.append(data)
        secondDataSource.removeAtIndex(indexPath.row)

        let newIndexPath = NSIndexPath(forRow: find(firstDataSource, data)!, inSection: 0)

        tableView.moveRowAtIndexPath(indexPath, toIndexPath: newIndexPath)
        tableView.endUpdates()
    }
}

当我从按钮点击触发IBAction时,我希望这个动作发生,但我不知道如何访问委托函数中给出的indexPath参数。这是我目前的IBAction按钮代码:

@IBAction func checkOffTask(sender: UIButton) {
    var checkedOff = false


    let indexOfCell = sender.tag
    sender.setImage(UIImage(named: "checkbox-checked"), forState: UIControlState.Normal)
    self.tableView.beginUpdates()
    self.tableView.reloadRowsAtIndexPaths([NSIndexPath(forItem: indexOfCell, inSection: 1)], withRowAnimation: UITableViewRowAnimation.Automatic)
    self.tableView.endUpdates()

}

如何让委托函数为IBAction函数工作?

2 个答案:

答案 0 :(得分:1)

好的,所以你的动作来自一个按钮,该按钮位于一个表视图单元格中,问题是:该表视图单元格的indexPath是什么。

最简单的方法是:

  1. 在表格视图中获取按钮的位置;
  2. 询问该位置的索引路径。
  3. E.g。

    @IBAction func checkOffTask(sender: UIButton!) {
        let originInTableView = self.tableView.convertPoint(CGPointZero, fromView: sender)
        let indexPath = self.tableView.indexPathForRowAtPoint(originInTableView)
    }
    

答案 1 :(得分:0)

好的,这是我之前使用过的解决方法。 看起来不漂亮但做得不错:

UIButton *likeButton = (UIButton *)sender;
UITableViewCell *cell = (UITableViewCell *)likeButton.superview.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

只需找到UICollectionView Class类型的按钮的正确superview。

P.S。 - 我的斯威夫特不是最好的。希望你能转换它。