在表格视图单元格中使用按钮出列单元格

Posted

技术标签:

【中文标题】在表格视图单元格中使用按钮出列单元格【英文标题】:Dequeue cell with button in table view cell 【发布时间】:2016-03-31 22:49:56 【问题描述】:

基本上,我有一个列出潜在员工的自定义表格视图单元格。此单元格包括几个标签和一个按钮。我想要的是删除单元格的按钮,但我能找到的只有这个:

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
if editingStyle == UITableViewCellEditingStyle.Delete 
  numbers.removeAtIndex(indexPath.row)    
  tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)

这仅允许您在滑动然后选择“删除”时删除单元格

我想我应该在我的 tableViewController.swift 文件中创建一个函数,该函数将删除给定行的单元格,并在我的自定义单元格类中创建一个将调用所述函数的 IBAction。

删除给定行的单元格的函数是什么样的?但是在这种情况下,单元格是否也知道它在哪一行或者是 tableViewController 的工作?

【问题讨论】:

看这个:***.com/questions/8983094/… 【参考方案1】:

    在您的cellForRowAtIndexPath 中设置cell.button.tag = indexPath.row

    为按钮添加目标:cell.button addTarget:...

    在按钮方法中,删除您的dataArray 中索引button.tag 处的项目。然后刷新tableViewself.tableView reloadData

【讨论】:

【参考方案2】:

您可以使用 UIButton 的 tag 属性来存储要删除的单元格的索引,并在处理程序中使用该 tag 属性来定位正确的单元格。在我的示例代码中,我只是做了一个假设 你只有一个部分,所以它被设置为零。

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

  ...
  ...
  cell.button.tag = indexPath.row
  let tapGesture = UITapGestureRecognizer(target: self, action: Selector("handleDeleteTap:"))
  cell.button.addGestureRecognizer(tapGesture)



func handleDeleteTap(sender: UITapGestureRecognizer)

  if let button = sender.view as? UIButton
  
    let indexPath = NSIndexPath(forRow: button.tag, inSection: 0)
    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 
  

【讨论】:

【参考方案3】:

1) 您必须在cellForRowAtIndexPath 中为您的按钮定义一个操作:

...
myButton.addTarget(self, action: "buttonTappedDelete:", forControlEvents: .TouchUpInside)
...

2) 你必须实现选择器: 2.1) 获取按钮所在的单元格。 2.2) 获取单元格的索引路径。 2.3) 从表格视图中删除单元格并更新您的数据。

func buttonTappedDelete(sender: UIButton) 
    let cell = sender.superview!.superview as! UITableViewCell
    let indexPath = self.tableView.indexPathForCell(cell)!
    self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    // update your data model, call `self.tableView.reloadData()`

【讨论】:

以上是关于在表格视图单元格中使用按钮出列单元格的主要内容,如果未能解决你的问题,请参考以下文章

在可重复使用的表格视图单元格中自动触摸按钮

Obj-C - 点击自定义表格视图单元格中的删除表格视图行按钮

为啥在制作自定义表格视图单元格时将可重用单元格出列两次

当点击另一个按钮时,取消选择表格视图单元格中的按钮

在表格视图中点击按钮 - 错误的单元格

如何使用自动布局来调整表格视图单元格中的视图大小?