我有一个自定义 tableviewcell,当我单击按钮时,我在单元格内有按钮,下一个 View Controller 不会显示他的内容,但是如果我单击单元格,然后单击按钮,下一个显示正确内容的 View Controller 是我的代码:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) as! TableViewCell
cell.label.text = numberArray[indexPath.row]
cell.button.tag = indexPath.row
cell.button.addTarget(self,action:#selector(TableViewController.someAction(sender:)),
for:.touchUpInside)
return cell
}
这是我的按钮操作:
func someAction(sender : UIButton){
self.performSegue(withIdentifier: "showDetail", sender: self)
}
这是我的转场功能:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = tableView.indexPathForSelectedRow
{
(segue.destination as! ViewController).number = numberArray[indexPath.row]
}
}
}
最佳答案
问题是在 prepare(for:sender:)
你得到indexPath
使用 indexPathForSelectedRow
现在,如果您直接单击按钮,则未选中的单元格需要传递 indexPath
performSegue(withIdentifier:sender:)
的单元格.
func someAction(sender: UIButton) {
let point = sender.superview?.convert(sender.center, to: self.tableView)
if let indexPath = self.tableView.indexPathForRow(at: point!) {
//pass indexPath as sender with performSegue
self.performSegue(withIdentifier: "showDetail", sender: indexPath)
}
}
现在在
prepare(for:sender:)
投sender
至indexPath
你们一切都好。override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let indexPath = sender as? IndexPath
{
(segue.destination as! ViewController).number = numberArray[indexPath.row]
}
}
}
注:如果您忽略使用
tag
,那就是击球手.
关于ios - uitableviewCell 中用于执行 segue 的 Swift UIbutton 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44047649/