我正在尝试通过按钮删除选定的行。因此,我需要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没有被触发。我尝试了不同的方法,但没有一个起作用。
答案 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)
}
}