当我按下按钮推送到另一个ViewController时,如何知道哪个indexPath.row我的按钮?

时间:2015-07-27 08:37:26

标签: ios swift

也许问题不够明确。

我的意思是我有一个TableView,它有一个Prototype Cell,这个Cell有一个按钮。

我设置了一个名为“ForMore”的segue名称,它结合了2个ViewControllers

但我多次重复使用这个Cell。

这就是结果:

当我点击所有单元格中的每个按钮时,它将跳转到另一个ViewController。

但我需要知道我点击了哪个按钮,因为ViewController需要根据我点击的单元格进行初始化。

那么,当我多次重复使用一个单元格时,如何知道我单击了哪个单元格。

3 个答案:

答案 0 :(得分:4)

使用自定义单元格执行任何操作的最佳方法是使用自定义类。

这样按钮就是类的属性,而动作可以发送到单元格。

通过这种方式,您可以使用块来自定义按钮在创建时的功能。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    // create the cell...

    cell.buttonBlock = {
        self.buttonTappedAtIndexPath(indexPath)
    }

    return cell
}

或类似的东西。

答案 1 :(得分:4)

我曾经遇到过这个问题,我这样做了。

// CustomCellClass

var tableViewdelegate: MyTableViewDelegateClass?

// button in cell action
@IBAction func buttonPressed(sender: AnyObject) {
    tableViewdelegate?.buttonPressedInCell(cell: self)
}

// MyTableViewDelegateClass

func buttonPressedInCell(cell: CustomCellClass) {
    let indexPath = tableView.indexPathForCell(cell)

    // other logic you have
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell =  // create your cell or deque

    cell.tableViewdelegate = self

    return cell
}

答案 2 :(得分:1)

我已经尝试了上述所有方法,但没有工作。也许我无法理解答案。

但是我自己解决了这个问题。

这就是我所做的:

1,创建一个新类继承名为'ForMore'的UIButton并声明一个名为'row'的var

2,将ForMoreButton与名为'ForMoreButton'的自定义单元格结合起来

3,当我在方法中创建单元格时,将indexPath.row分配给cell.ForMoreButton.row

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

4,在ViewController中我的tableview里面,直接将ForMoreButton与这个ViewController结合使用'ButtonTapped'动作然后我们可以从(发送者为!ForMore)获取行.row