[英]Detecting cell whose button was tapped
在 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 嗎?
將 segue 從視圖 controller (而不是從表視圖單元格)重新連接到目標 controller
刪除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] } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.