有没有办法让UITableView的某些部分不可滚动?

时间:2014-07-27 08:36:15

标签: objective-c uiswipegesturerecognizer

我正在使用纸张折叠动画从屏幕顶部显示一些内容,通过tableView。

现在我有一个触发此折叠动作的按钮。

我希望通过从上到下滑动来触发此操作。但我的TableView是全屏的,所以我想如果有一种方法可以在UITableViewCell或表的一部分上进行制作,而不是可滚动的,因为它可以触发折叠滑动。

我尝试过使用UISwipeGestureRecognizer但它运行得不好......

1 个答案:

答案 0 :(得分:1)

有几种方法可以阻止UITableView滚动。 UITableView是UIScroll视图的子类,因此您可以使用UIScroll视图方法来停止可滚动的表视图。因此,在tableViewController中,您可以调用[[self tableView] setScrollEnabled:NO]。您还应该能够通过调用[[self tableView] setUserInteractionEnabled:NO](UIView上的方法)来停止表视图上的任何用户交互。

您可以继承UITableView并覆盖setContentOffset:方法(另一个scrollView方法),并且只在您希望滚动表视图时调用[super setContentOffset:](可能您可能需要覆盖其他方法也是如此。

您还可以抓住scrollView正在使用的平移手势识别器,这样您就可以准确地查看scrollView为滚动获取的消息,并且您可以相应地调整滚动偏移[[self tableView] panGestureRecognizer]。拥有panGestureRecognizer之后,您应该可以将其设置为等待使用[UIPanGestureRecognizer requireGestureRecognizerToFail:的swipeGestureRecognizer失败。这意味着滚动视图使用的平移手势识别器只有在滑动失败时才会开始工作,您可能需要这样做才能使swipeGestureRecognizer在屏幕边缘附近没有启动时失败。