【问题标题】:iOS UIScrollView cancel UIButton touch on scrolliOS UIScrollView取消UIButton触摸滚动
【发布时间】:2013-03-26 23:44:51
【问题描述】:

我在 UIScrollView 中有一些 UIButton,但我不想延迟按钮的触摸。但是,一旦滚动视图检测到拖动/滚动,我想取消 UIButton 触摸并继续滚动 UIScrollView。

我已包含以下内容...

_scrollView.delaysContentTouches = NO;

...但是(显然)按钮触摸在拖动时不会取消。有人对我如何实现此功能有任何建议吗?

【问题讨论】:

    标签: iphone ios objective-c uiscrollview uibutton


    【解决方案1】:

    您可以使用 scrollViewWillBeginDragging 来触发通知并通过在按钮代码中侦听来处理按钮取消。我认为这就是你想要做的,但我不确定我是否正确理解了你的问题。

    【讨论】:

    • 感谢您的反馈。我尝试了 scrollViewWillBeginDragging 但如果您在滚动之前点击按钮,它不会触发。我想要的是点击一个按钮,但没有延迟。然后,如果您在手指仍然向下时移动手指,它会取消按钮并开始滚动。
    • 在 iOS 主屏幕上试试这个...点击一个应用程序,你会发现它变暗了,但只要你拖动手指,它就会取消触摸并改为滚动
    • 所以你想让按钮立即触发一个动作,但是当滚动视图被拖动取消时?一旦你按下一个按钮,然后拖动,scrollViewWillBeginDragging 不会被调用?主屏幕的好例子。
    • scrollViewDidScroll 是否被调用?
    • scrollViewDidScroll 也不会被调用。一旦你点击一个按钮,如果你拖动你的手指,它仍然认为你在点击按钮,直到你的手指离按钮很远(标准 UIButton 行为),然后它才会取消
    【解决方案2】:

    你可以覆盖UIScrollView这个方法。

    -(BOOL)touchesShouldCancelInContentView:(UIView *)view
    {   
        return YES;
    }
    

    在你的 UIButton 中,你应该为不同的控件事件添加不同的方法。

    1. UIControlEventTouchDown显示高亮效果。
    2. UIControlEventTouchUpInside | UIControlEventTouchUpOutside 的触发按钮;
    3. UIControlEventTouchCancel 的清晰高亮效果。

    【讨论】:

    • 这是所需的解决方案。谢谢。
    • UIControlEventTouchCancel 是我缺少的一个通知,它起作用了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多