在按钮函数 Swift 中访问 indexPath.row

Access indexPath.row in button function Swift

我正在尝试使用按钮删除选定的行。因此我需要 indexPath.row,我将值写入全局变量,但是当我在按钮中访问它时,它 returns 对我来说是零。

var selectedRow = ""

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let selectedEvent = myConversationRows[indexPath.row]
    selectedRow = selectedEvent.id!
}

@IBAction func cancelConversation(_ sender: Any) {

    print("selected")
    print(self.selectedRow)
}

我想当我点击按钮时 didSelectRowAt 没有被触发。我尝试了不同的方法,但 none 有效。

您应该将 selectedRow 声明为 Int 并为其分配默认值 -1,意思是“未设置”。然后,在 tableView(_:didSelectRowAt:) 中放置此行:

selectedRow = indexPath.row

cancelConversation() 中输入:

if selectedRow != -1 {
    //...
}

不要使用全局变量!!!

她是解决该问题的简单方法:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if let cell = tableView.dequeueReusableCell(withIdentifier: "YOURE_CELL_ID", for: indexPath) as? YOUT_CELL_CLASS {
        cell.youreButton.tag = indexPath.row
    }
}

和:

@IBAction func cancelConversation(_ sender: Any) {
    if let btn = sender as? UIButton {
        let row = btn.tag
        tableView.deleteRows(at: [IndexPath(row: row, section: 0)], with: .bottom)
    }
}

为什么不使用 ios 删除滑动手势?

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        print("Deleted")


        self.tableView.deleteRows(at: [indexPath], with: .automatic)
    }
}