是否存在与 editActionsForRowAtIndexPath 相反的 tableView 函数?
Posted
技术标签:
【中文标题】是否存在与 editActionsForRowAtIndexPath 相反的 tableView 函数?【英文标题】:Is there a tableView function that is the inverse of editActionsForRowAtIndexPath? 【发布时间】:2016-08-15 23:26:44 【问题描述】:我目前有一个极其复杂的 tableView 设置。我发现有一些代码可以在函数“editActionsForRowAtIndexPath”期间触发,以使其在正确的时刻发生。我也想触发从这一点返回的代码。
具体来说,当我单击单元格左侧的红色小编辑符号时,会调用“editActionsForRowAtIndexPath”。我利用这一刻将地图上突出显示的图钉更改为红色突出显示。当单元格未被选中以进行删除时,我想取消突出显示红色的引脚。我找不到直接执行此操作的函数。
我主要对 Swift 感兴趣,但我可以在 99% 的时间内翻译 Objective C,所以效果也不错。
【问题讨论】:
didEndEditingRowAtIndexPath 直到 tableView.editting == false 之后才会被调用。再次单击单元格时,tableView.editting == true,但不再选择删除单元格。 只是为了清楚起见 - 您希望一个大头针的突出显示和消失取决于它的关联单元格是否在右侧显示删除选项卡? 是的,我的功能完全正常,只是我想在取消选中时取消突出显示它。 如果没有更好的答案,试试这个:***.com/questions/33210340/… 【参考方案1】:实际上,默认的红色删除按钮位于您的单元格下方,并使您的单元格向左滑动。因此,将单元格向后滑动是实现此目的的更好方法。只需在开始编辑时对单元格的内容视图进行转换,并在结束编辑时重置。 另一种方法是在您的自定义单元格中添加目标操作。并为编辑模式注册通知。它简单明了,但并不优雅。
【讨论】:
我正在尝试制作一个类似于 Zillow 的应用程序,并且我越来越意识到你只需要伪造现有的功能,因为 ios 默认设计以太多方式锁定了你拥有多少功能。我同意你的看法。【参考方案2】:好的,感谢那些试图提供帮助的人。我最终采用的似乎最干净的解决方案是这样的:
class ThisViewController: UITableViewDelegate, UITableViewDatasource
var tapView: ClickThroughView?
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]?
//code for delete being shown goes here
tapView = ClickThroughView(frame: tableView.frame)
tapView?.delegate = self
view.addSubview(tapView!)
view.bringSubviewToFront(tapView!)
return nil
extension ThisViewController: HandleViewTapDelegate
func handleTap()
//code for delete going away goes here
tapView?.removeFromSuperview()
tapView = nil
protocol HandleViewTapDelegate
func handleTap()
class ClickThroughView: UIView
var delegate: HandleViewTapDelegate?
override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool
delegate?.handleTap()
return false
【讨论】:
【参考方案3】:在“editActionsForRowAtIndexPath”函数中,您可以定义表格视图行将具有的操作。在那里,您可以说出选择该按钮时会发生什么。这是一种知道他们何时点击删除按钮的方式。
override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]?
var actions = [UITableViewRowAction]()
let delete = UITableViewRowAction(style: .Destructive, title: "Remove") (action, indexPath) in
//Here you can unhighlight the pin
return [delete]
要知道他们何时停止编辑,您可以使用以下功能:
func tableView(tableView: UITableView, didEndEditingRowAtIndexPath indexPath: NSIndexPath)
//Here you can unhighlight the pin
感谢@Shades 的帮助
【讨论】:
didEndEditingRowAtIndexPath 在 tableView.editting == false 时被调用。我已经知道如何处理删除操作。我想知道如何处理当他们没有点击删除按钮并且他们仍在编辑时会发生什么。 我抓住了我能找到的每个 tableView 函数,并用 print 语句和它的名字干火了它。我找不到任何处理该点击的功能。使用 onTap 侦听器创建一个涵盖除删除按钮之外的所有内容的视图似乎是我目前唯一的选择。 如果你打算这样做,那么创建一个轻击手势识别器 这就是我所指的。这似乎是一个非常混乱的解决方案。以上是关于是否存在与 editActionsForRowAtIndexPath 相反的 tableView 函数?的主要内容,如果未能解决你的问题,请参考以下文章
是否存在与 editActionsForRowAtIndexPath 相反的 tableView 函数?