【问题标题】:Cancel current UIScrollView touch取消当前 UIScrollView 触摸
【发布时间】:2013-09-01 01:48:07
【问题描述】:

我有一个UIScrollView 有几个子视图等等。我也是scrollView的delegate并实现了- (void)scrollViewDidScroll:(UIScrollView *)scrollView。在我的卷轴下面有另一个视图。

如果scrollView的contentOffset在x轴上低于50px,我想显示该视图,“重置”scrollView的contentOffset并取消当前的scrollView手势,以便用户在新视图出现时不会操纵其内容。

我已经实现了这样的方法:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x < -50)
    {
        scrollView.contentOffset = CGPointZero;
        [self showBackView];
        //here I want to cancel the current touch on the scrollview since it keeps scrolling if I drag my finger
    }
}

我曾尝试将userInteractionEnabled 属性设置为NO,但只有在触摸结束后才会生效。而且我已经尝试了许多其他属性,但似乎都没有。

我该如何解决这个问题?

【问题讨论】:

  • 您是否尝试将scrollEnabled 设置为NO?
  • 是的,它不起作用。禁用平移手势识别器就可以了。

标签: ios objective-c uiscrollview uiscrollviewdelegate


【解决方案1】:

尝试禁用滚动视图的panGestureRecognizer(然后重新启用它)。这将取消识别器的当前会话:

ObjC

self.scrollView.panGestureRecognizer.enabled = NO;
self.scrollView.panGestureRecognizer.enabled = YES;

斯威夫特

self.scrollView.panGestureRecognizer.isEnabled = false
self.scrollView.panGestureRecognizer.isEnabled = true

【讨论】:

  • 这很棒。我有一个带有UITableViewUIRefreshControl 的场景,当它被拉下时,做了一个API 调用。如果 API 调用出错,则会出现警报对话框。问题是您的触摸仍在UITableView 上,因此您可以交互并调用我们不想要的另一个 API 调用。现在取消了UITableViews 触摸事件,由于警报,用户无法与基础表视图交互。
猜你喜欢
  • 2013-03-26
  • 2014-02-28
  • 1970-01-01
  • 2012-08-27
  • 2018-01-19
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多