如果 UITableView 在 UIScrollView 中,则无法在 UITableView 上执行滑动删除

Posted

技术标签:

【中文标题】如果 UITableView 在 UIScrollView 中,则无法在 UITableView 上执行滑动删除【英文标题】:Can not perform swipe-to-delete on UITableView if it is in UIScrollView 【发布时间】:2014-12-02 10:49:20 【问题描述】:

我已经创建了一个 UITableView,它可以在正常情况下对其表格单元格执行滑动删除,但是当我将 UITableView 放入可以水平滚动的 UIScrollView 时,外部滚动视图将吞噬滑动事件,因此滑动删除不可行。

【问题讨论】:

【参考方案1】:

很遗憾地告诉您,您必须为您的功能放弃一个,因为这两个功能依赖于相同的手势。 如果要保留滑动删除,请设置外部scrollview.scrollEnabled = NO。我认为这会有所帮助。

如果没有,有一个按钮来启动 tableview 编辑模式。这将使您删除带有滚动视图的单元格可以滑动。

【讨论】:

【参考方案2】:

我终于找到了解决办法!

子类化外部 UIScrollView,并覆盖一个方法

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer

@interface AllowSwipeScrollView : UIScrollView

@end

@implementation AllowSwipeScrollView

-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
    BOOL inTableViewCell = .... // check the current touch is in table view cell

    if (inTableViewCell) 
        return NO;
    else
        return [super gestureRecognizerShouldBegin:gestureRecognizer];
    


@end

并确保 UITableView 实例位于 AllowSwipeScrollView 中。

【讨论】:

@Yoko 如果这个方法返回NO,内部UITableView会自动接收swipe事件。【参考方案3】:

试试这个条件

如果 (ScrollView == self.tableView) 返回;

在scrollviewdidscroll 方法中。

【讨论】:

以上是关于如果 UITableView 在 UIScrollView 中,则无法在 UITableView 上执行滑动删除的主要内容,如果未能解决你的问题,请参考以下文章

在 UIScrollView 中快速嵌套 UITableView

UIScroll 中心图像

何时使用 UITouch 与 UIScroll

IOS超强表格控件GMGridView

UIScroll和UIPickView

UIScroll 及其嵌套元素