【问题标题】:UIScrollView with UIButtons - Scroll View won't scroll when touch began on button带有 UIButtons 的 UIScrollView - 当按钮开始触摸时,滚动视图不会滚动
【发布时间】:2014-09-10 17:15:06
【问题描述】:

我刚刚更新到 xCode 6 和 iOS 8,我发现我的应用程序有些奇怪。在我的应用程序中,我有一个滚动视图,其中有几个按钮,水平对齐。我将其设置为创建我自己的自定义可滚动标签栏控制器。在更新到 iOS 8 和 xCode 6 之前,一切都很完美,但现在我意识到,当我尝试向左或向右滚动滚动视图时,我最初的触摸是在滚动视图中的一个按钮内,然后没有滚动发生。但是,如果我在按钮之间触摸,则滚动会按预期工作。我认为这是按钮注册触摸的一些问题,就好像滚动视图从未被触摸过。但这在完美之前是 100% 工作的,所以我不知道发生了什么!

【问题讨论】:

  • 仅供在此处使用谷歌搜索的任何人使用。我有一个奇怪的地方,更新到 XCode6,由于某种原因,它在 Storyboard 中的视图上关闭(!)“启用用户交互”。谁知道为什么!我打开它,一切都很好。

标签: xcode uiscrollview uibutton ios8


【解决方案1】:

我最终创建了 UIScrollView 的子类并将其 cancelContentTouches 值设置为 TRUE,我的问题就解决了

【讨论】:

  • 不适合我。它不像 7.1 那样流畅
  • 我想你的意思是这个方法 -(BOOL)touchesShouldCancelInContentView:(UIView *)view
  • 没有cancelContentTouches。你的意思是canCancelContentTouches?我将它设置为YES,但它仍然不适合我。
  • 正如 rozochkin 所说,覆盖 (BOOL)touchesShouldCancelInContentView:(UIView *)view 并返回 YES 可以解决问题。您必须继承 UIScrollView 才能使这个基本行为起作用,这似乎很奇怪。
【解决方案2】:

继承 UIScrollView 并将下面的代码添加到 .m 文件中,确实解决了我在 iOS 8 下的滚动冻结问题。

代码:

- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view
{
    UITouch *touch = [touches anyObject];

    if(touch.phase == UITouchPhaseMoved)
    {
        return NO;
    }
    else
    {
        return [super touchesShouldBegin:touches withEvent:event inContentView:view];
    }
}

这个解决方案在pasta12的回答https://stackoverflow.com/a/25900859/3433059中找到

【讨论】:

  • 在我的情况下需要将此解决方案添加到其他给定的解决方案中。
【解决方案3】:

无需继承 ScrollView 就用这个吧:

yourScrollView.panGestureRecognizer.delaysTouchesBegan =yourScrollView.delaysContentTouches;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 2011-04-22
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    相关资源
    最近更新 更多