Swift - 表格视图单元格内的单击按钮不会在该单元格的功能处调用确实选择行

Posted

技术标签:

【中文标题】Swift - 表格视图单元格内的单击按钮不会在该单元格的功能处调用确实选择行【英文标题】:Swift - Clicked button inside tableview cell does not call the did select row at function of that cell 【发布时间】:2018-12-10 04:26:15 【问题描述】:

我以编程方式创建了一个表格视图,每个表格视图单元格都有与之关联的按钮。

如果我单击该行,我可以计算出与该行上的按钮关联的标签,然后可以在应用其他一些功能时编辑标题。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    TmpActionConnectorTag = indexPath.row + 700 //Tag associated to button

当按钮被点击时,我有这段代码改变了该行上的另一个按钮

let tag = TmpActionConnectorTag
    let tmpButton = self.view.viewWithTag(tag) as? UIButton

问题是,如果我直接单击 tableview 单元格中的按钮,确实选择行不会被调用并且没有给出标记值。为此,我必须先在单元格内单击,然后单击按钮才能知道与该行关联的标签。

有没有办法在点击按钮时锻炼索引行,这样我就不必点击实际的单元格?

上面是单元格的正常外观,下面显示了必须如何选择单元格才能获得索引值。

【问题讨论】:

【参考方案1】:

按钮操作不会调用didSelectRowAt。你应该选择 delegate 方法。如果不知道委托意味着refer this

【讨论】:

【参考方案2】:

单元格的按钮不会触发func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath),而是您需要将target 添加到您的按钮,这通常在cellForItemAt 中完成。

将目标添加到单元格内的按钮

   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
        let cell = MyTableViewCell()
        cell.button.tag = indexPath.row
        cell.button.addTarget(self, action: #selector(didTapCellButton(sender:)), for: .touchUpInside)
    

处理按钮操作

@objc func didTapCellButton(sender: UIButton) 
    guard viewModels.indices.contains(sender.tag) else  return  // check element exist in tableview datasource

    //Configure selected button or update model

【讨论】:

嗨,凯,我正在尝试您的方法,但手柄按钮代码似乎不起作用。保护 viewModels.indices.contains(sender.tag) else return 如果您的 tableview 不依赖于数据源,则可以移除保护。【参考方案3】:

禁用按钮的控件对我有用。

以编程方式:

editButton.isEnabled = false

~或~

IB:

取消选中“控制”部分中的“启用”框。

【讨论】:

以上是关于Swift - 表格视图单元格内的单击按钮不会在该单元格的功能处调用确实选择行的主要内容,如果未能解决你的问题,请参考以下文章

当在同一个单元格内单击按钮时,如何在自定义表格视图单元格内隐藏/显示特定视图

swift中集合视图单元格内的按钮操作

滚动后某些表格视图单元格内容消失(swift)

快速单击其中一个 tableview 单元格内的按钮后重新加载 tableview

在 ios 中展开和折叠表格视图单元格

使用Swift 3单击collectionView单元格内的项目时如何导航另一个视图控制器