Swift - tableview 单元格内的单击按钮不会调用该单元格函数中的 did select 行
Swift - Clicked button inside tableview cell does not call the did select row at function of that cell
我以编程方式创建了一个 tableview,每个 tableview 单元格都有与之关联的按钮。
如果我单击该行,我可以计算出与该行上的按钮关联的标签,然后在应用其他一些功能时能够编辑标题。
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
问题是如果我直接点击表格视图单元格中的按钮,did select 行不会被调用并且没有给出标记值。为此,我必须先在单元格内单击,然后单击按钮才能知道与该行关联的标签。
有没有一种方法可以在单击按钮时锻炼索引行,这样我就不必单击实际的单元格了?
上面是单元格的正常外观,下面显示了单元格必须如何 selected 才能获得索引值。
按钮操作不会调用 didSelectRowAt
。您应该使用 delegate 方法。如果不知道委托意味着
单元格的按钮不会触发 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
}
禁用按钮的控制对我有用。
以编程方式:
editButton.isEnabled = 假
~或~
IB:
取消选中“控制”部分中的“已启用”框。
我以编程方式创建了一个 tableview,每个 tableview 单元格都有与之关联的按钮。
如果我单击该行,我可以计算出与该行上的按钮关联的标签,然后在应用其他一些功能时能够编辑标题。
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
问题是如果我直接点击表格视图单元格中的按钮,did select 行不会被调用并且没有给出标记值。为此,我必须先在单元格内单击,然后单击按钮才能知道与该行关联的标签。
有没有一种方法可以在单击按钮时锻炼索引行,这样我就不必单击实际的单元格了?
上面是单元格的正常外观,下面显示了单元格必须如何 selected 才能获得索引值。
按钮操作不会调用 didSelectRowAt
。您应该使用 delegate 方法。如果不知道委托意味着
单元格的按钮不会触发 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
}
禁用按钮的控制对我有用。
以编程方式:
editButton.isEnabled = 假
~或~
IB:
取消选中“控制”部分中的“已启用”框。