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

Posted

技术标签:

【中文标题】当我按下按钮推送到另一个 ViewController 时,如何知道我的按钮在哪个 indexPath.row 中?【英文标题】:How can I know which indexPath.row my button in when I press a button to push to another ViewController? 【发布时间】:2015-07-27 08:37:25 【问题描述】:

也许问题不够清楚。

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

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

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

这是结果:

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

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

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

【问题讨论】:

是自定义按钮吗? @FrequencyMatched 不是,是普通的按钮,但是是绑定了一个 UITableViewCell 类 这是自定义单元格吗? @Justa 是的,这是我创建的自定义单元格,用于将我的单元格与其中的控件结合起来 可能重复:***.com/questions/28659845/…, ***.com/questions/25867439/…, ***.com/questions/29722113/…, ***.com/questions/27105948/…, ... 【参考方案1】:

使用自定义单元格做任何事情的最佳方式是拥有一个自定义类来配合它。

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

这样,您可以使用块来自定义按钮在创建时的作用。

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

    // create the cell...

    cell.buttonBlock = 
        self.buttonTappedAtIndexPath(indexPath)
    

    return cell

或者类似的东西。

【讨论】:

检查这个问题老兄***.com/questions/31649220/… @nischalhada 这是同一个问答广告这个问题。【参考方案2】:

我曾经也遇到过这个问题,我就是这样做的。

// 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

【讨论】:

使用块/闭包的可行替代方法是使用这样的委托/协议方法。【参考方案3】:

上面的方法我都试过了,还是不行。可能是我没听懂答案。

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

这就是我所做的:

1、新建一个类继承UIButton名为‘ForMore’并声明一个var名为‘row’

2、将 ForMoreButton 与名为“ForMoreButton”的自定义单元格组合起来

3、我在方法中创建单元格时将indexPath.row赋值给cell.ForMoreButton.row

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

4、在我的tableview里面的ViewController中,直接把ForMoreButton和这个ViewController结合一个action‘ButtonTapped’就可以从(sender as!ForMore).row中获取行了

【讨论】:

我也无法理解,您介意解释一下吗?我需要它。

以上是关于当我按下按钮推送到另一个 ViewController 时,如何知道我的按钮在哪个 indexPath.row 中?的主要内容,如果未能解决你的问题,请参考以下文章

从 UITabBarItem 推送到 UIViewController

推然后模态然后推?

为啥不需要的数据被推送到我的阵列中?

QT5下的QPushButton错误,同时在macos上推送到全屏

快速解除模式并推送到新的 VC

“隐藏键盘”按钮不会将键盘隐藏在iPad模拟器上