在FirstVC上,我有一个变量索引:
var index = -1
,它保留单元格indexPath.row的信息,因此我可以知道在哪个单元格中点击了按钮。 (每个单元格都有自己的按钮)
我这样尝试过:
CellForRow
:
cell.Btn.tag = indexPath.row
cell.Btn.addTarget(self, action: #selector(detectButton), for: .touchUpInside)
然后:
@objc func detectButton(sender: UIButton) {
self.index = sender.tag
}
secondVC通过segue连接,因此我尝试发送如下索引:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "MySegue" {
let vc = segue.destination as! SecondVC
vc.element = self.elements[index]
}
}
它在那里崩溃,因为索引仍然是-1
。我以为@objc func detectButton
将在prepareForSegue
之前被调用,但不是。
为什么?还有其他解决方案可以将索引发送到secondVC吗?
答案 0 :(得分:2)
将序列从视图控制器(而不是从表视图单元格)重新连接到目标控制器
删除var index = -1
替换
@objc func detectButton(sender: UIButton) {
self.index = sender.tag
}
with(请注意下括号后的下划线)
@objc func detectButton(_ sender: UIButton) {
performSegue(withIdentifier: "MySegue", sender: sender.tag)
}
替换
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "MySegue" {
let vc = segue.destination as! SecondVC
vc.element = self.elements[index]
}
}
使用
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "MySegue" {
let vc = segue.destination as! SecondVC
let index = sender as! Int
vc.element = self.elements[index]
}
}
编辑:
显然,在当前segue设置中,按钮触发了segue。如果是这样,请删除var index = -1
并删除行cell.Btn.addTarget...
(但不是分配标签的行)和整个方法@objc func detectButton(_ sender: UIButton) { ... }
。
在prepare(for segue
中,从sender
参数中获取标记
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "MySegue" {
let vc = segue.destination as! SecondVC
let index = (sender as! UIButton).tag
vc.element = self.elements[index]
}
}