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

时间:2018-07-17 12:52:55

标签: swift uitableview indexpath

我正在尝试通过按钮删除选定的行。因此,我需要indexPath.row,我将值写入全局变量,但是当我在按钮中访问它时,它向我返回nil。

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没有被触发。我尝试了不同的方法,但没有一个起作用。

2 个答案:

答案 0 :(得分:1)

您应将selectedRow声明为Int,并为其分配默认值-1,表示“未设置”。然后,在tableView(_:didSelectRowAt:)中输入以下行:

selectedRow = indexPath.row

cancelConversation()中输入:

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

答案 1 :(得分: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)
    }
}