簡體   English   中英

檢測按鈕被點擊的單元格

[英]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:
  • 將 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 seguesender參數中獲取標簽

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM