在按钮功能Swift中访问indexPath.row [重复]
Posted
技术标签:
【中文标题】在按钮功能Swift中访问indexPath.row [重复]【英文标题】:Access indexPath.row in button function Swift [duplicate] 【发布时间】:2018-07-17 12:52:55 【问题描述】:我正在尝试使用按钮删除选定的行。因此我需要 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 没有被触发。我尝试了不同的方法,但都没有奏效。
【问题讨论】:
首先需要选择一行,第二个selectedEvent.id可能为nil 制作一个自定义 UITableViewCell,在该单元格中从您的数组中有一个模型对象,在 UITableViewCell 内的 IBAction 中,获取 id 并使用协议调用控制器。在控制器的协议覆盖中,从数组中移除 id 并重新加载 tableView。 这绝对应该是自定义单元格,所以在 cellForRowAt 中将目标添加到按钮。如果您有兴趣,我可以详细说明并为您编写解决方案。 【参考方案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)
【讨论】:
这实际上是一个不好的方法。删除一行后,其下方行中的标签将关闭 1。查看重复答案以了解如何为按钮获取正确的 indexPath。【参考方案2】:您应该将selectedRow
声明为Int
,并为其分配默认值-1
,意思是“未设置”。然后,在tableView(_:didSelectRowAt:)
中输入这一行:
selectedRow = indexPath.row
在cancelConversation()
中输入:
if selectedRow != -1
//...
【讨论】:
selectedRow 返回 -1 这表明tableView(_:didSelectRowAt:)
从未被调用过。您是否正确连接了 tableview 代表插座?
didSelectRow 如果他的按钮有 userInteractionEnabled 将不起作用;)因此我最初的想法是将目标连接到按钮,以便只有按钮会响应点击,而不是整个行。以上是关于在按钮功能Swift中访问indexPath.row [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 moveRow(at:,to:) 时如何更改 UITableViewCell 的不透明度和颜色