单元格滑动事件和事件内的按钮触摸

Posted

技术标签:

【中文标题】单元格滑动事件和事件内的按钮触摸【英文标题】:Cell swipe event and button touch inside event 【发布时间】:2016-01-07 10:36:40 【问题描述】:

我有一个带有 4 个 UIButtons 的表格单元格视图:

按钮有 Touch Up Inside 事件

@IBAction func increasDealRatingAction(sender:UIButton) 
    let buttonPosition = sender.convertPoint(CGPointZero, toView: self.tableView)
    if let indexPath = self.tableView.indexPathForRowAtPoint(buttonPosition) 
       ...
    

我对每个单元格都有编辑操作:

func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? 
    ...
    return [addToWishListAction, addToPurchasesAction, deleteAction]

问题是,当您向左滑动以显示“添加到愿望清单”、从星形按钮位置“删除”操作、也处理了单击事件或在您滑动按钮区域时未检测到滑动操作。

【问题讨论】:

如果您使用的是 UISwipeGestureRecognizer 那么请使用默认的 tableviewSwipe 或者您可以使用第三方库来显示滑动按钮(如 SWTableViewCell)。 【参考方案1】:

为按钮添加滑动手势识别器

let swipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("handleSwipes:")) // nil for selector is also possible
swipeGestureRecognizer.direction = .Left // Add this if you want only one direction
dealRatingButton.addGestureRecognizer(swipeGestureRecognizer)
// Add three star buttons

并实现gestureRecognizer(_:shouldReceiveTouch:) 以返回false

【讨论】:

我添加了您的代码,但不明白这是什么 gestureRecognizer(_:shouldReceiveTouch:) ? handleSwipes 函数中应该包含什么? 这是UIGestureRecognizerDelegate 中的一个方法。如果您什么都不想做,只需设置 nil 而不是选择器,正如我在评论中所写的那样 正确使用这个肯定会至少解决你的第二个问题'滑动按钮区域时没有检测到滑动动作'。发布您尝试过的内容,否则无法解决任何问题。 所以我添加委托方法:func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool return false; 并添加您的按钮代码。 然后当我开始在按钮内滑动时,单元格忽略滑动和编辑按钮不显示。并在结束按钮单击事件触发。我需要在所有按钮下都有一个不可见的层,当我滑动时会打开编辑操作...

以上是关于单元格滑动事件和事件内的按钮触摸的主要内容,如果未能解决你的问题,请参考以下文章

用户将手指放在屏幕上时立即触发事件

监听滑动事件而不消耗任何触摸事件

滑动冲突问题,触摸事件拦截处理

jquery mobile - 在滑动事件上检测触摸数组

移动端touch触屏滑动事件、滑动触屏事件监听!

微信小程序——左右滑动切换页面