4

我遇到了与UIScrollview 相同的问题 enable delete row by swipe
这是一个 tableView 和另一个视图作为 scrollView 的子视图工作,我无法启用“滑动删除”,直到我将 scrollView 的scrollEnable属性设置为,但它带来了另一个问题:我无法在 tableView 和另一个视图之间滑动除了设置scrollEnable属性以启用“滑动删除”
之外,还有其他方法吗? 如果没有,我应该什么时候设置,什么时候应该设置“滑动删除”和“在视图之间滑动”都可以正常工作?
self.scrollEnable = NOself.scrollEnable = YES

谢谢

4

5 回答 5

6

我已经成功使用

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

在包含 tableview 的 UIScrollView 子类中,以使驻留在 tableview 中的 UISwipeGestureRecognizer 能够触发而不是被“主”滚动视图的手势识别器吞噬。

于 2012-11-19T12:13:10.503 回答
6

您需要使用UIScrollView. 它应该适用于水平滚动视图中的表格视图:

@interface MyCoolScrollView : UIScrollView

@end

@implementation MyCoolScrollView

// Allows inner UITableView swipe-to-delete gesture
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRequireFailureOfGestureRecognizer:(nonnull UIGestureRecognizer *)otherGestureRecognizer
{
    return [otherGestureRecognizer.view.superview isKindOfClass:[UITableView class]];
}

@end
于 2015-12-18T19:18:28.707 回答
4

如果,我没记错的话,滚动视图消耗了触摸,并且表格的编辑没有发生,因为表格没有得到触摸。这可以通过继承 UIScrollView 来解决,以便将触摸也发送给下一个响应者。所以这只是覆盖touchesBegan、move 和end 的问题。今天晚些时候将使用我现在在路上所需的代码更新答案。干杯!

编辑:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.nextResponder touchesBegan:touches withEvent:event];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    if(!self.dragging)
    {
        [self.nextResponder touchesMoved:touches withEvent:event];
    }
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.nextResponder touchesEnded:touches withEvent:event];
}

只需创建一个继承自UIScrollView并在实现中删除此代码的类。这将使 scrollView 不会吞下触摸,而是将它们传递下去。显然,在创建您的 scrollView 时使用您刚刚创建的类而不是UIScrollView. 抱歉耽搁了。希望这可以帮助。

干杯!

于 2012-07-08T11:22:51.847 回答
3

@THOR 的回答没问题,但如果你UITableView在 a 中UIScrollView,你可能也有另一个UIView。当您向上滚动 时tableview,您不小心滑到了“其他视图”。

这将防止滑动,并允许您滑动删除。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
if (gestureRecognizer.state != 0) {
        return YES;
} else {
    return NO;
}

}

于 2015-02-05T16:54:22.130 回答
0

我知道这个线程很旧,但这里是 swift 4 版本,为我在 iOS 11 中工作(你可以继承 UIScrollView):

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOf otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    if (otherGestureRecognizer.view != nil && otherGestureRecognizer.view!.superview != nil) {
        return otherGestureRecognizer.view!.superview!.isKind(of: UITableView.self)
    }

    return false
}

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    if (gestureRecognizer.state != .possible) {
        return true
    }

    return false
}
于 2018-08-03T03:27:53.053 回答