iOS:通过scrollview适当传递正确的事件
Posted
技术标签:
【中文标题】iOS:通过scrollview适当传递正确的事件【英文标题】:iOS: Appropriately pass the right events through scrollview 【发布时间】:2013-07-23 12:27:36 【问题描述】:所以我已经为这个问题苦苦挣扎了很长时间,我相信我已经尝试了所有可用的 *** 解决方案,但我仍然无法做到这一点。
在我的社交网络应用程序的所有其他视图中都有一个“幕布视图”
这是窗帘处于默认模式时的样子
这是窗帘处于“向下”模式时的样子
窗帘是包含在滚动视图中的视图。
为了能够拉下窗帘,我必须将内容大小设置为覆盖绿色按钮,这可以在图像中看到。
内容大小类似于下面这张图片中的黑色描边区域。
我的问题。当滚动视图处于默认模式时,我无法弄清楚如何使我的绿色按钮“跟随,每个人,附近”可点击/可触摸。显然,滚动视图的内容大小与按钮重叠,但我该如何避免呢?
我尝试过 hitTest 覆盖,尝试通过事件链传递触摸事件和 其他类似的解决方案,但没有运气。我不能让它工作。
我已经使用包含滚动视图的自定义视图控制器实现了窗帘视图。 然后这个视图被添加到根视图中。
【问题讨论】:
你试过[self.view bringSubviewToFront:yourButton]
您确定需要滚动视图吗?简单的滑动手势不起作用?
是的,我需要滚动视图,当然可以使用手势识别器,但我希望它可以滚动。谢谢。
@codeInOrange 子视图(按钮)与窗帘不在同一视图上
所以您的滚动视图位于所有其他视图之上?
【参考方案1】:
当UIScrollView
处于默认位置时,您应该隐藏它:
scrollView.hidden = YES;
这将防止UIScrollView
阻止对其下方按钮的触摸。
见Apple's UIView doco:
隐藏的视图从它的窗口中消失并且不接收输入事件。但是,它仍保留在其父视图的子视图列表中,并像往常一样参与自动调整大小。
然后在拉下窗帘之前将 hidden 设置为 NO。
编辑:
要回答您评论中的问题:
我如何知道我的滚动视图是否处于默认位置,没有触发事件?
您应该能够通过检查滚动视图上的contentOffset
属性来确定您的滚动视图是处于默认(隐藏)位置还是处于向下位置(显示)。
如果我将其设置为隐藏,窗帘的图像不会消失吗?是的,它会。如果您希望视图仍部分显示在顶部而不是完全消失,您将需要一种不同的方法(请参阅下面的一些建议)。
滚动视图应该用手指“向下拖动”(当然)。所以它需要随时触发事件。您可以在主视图上检测到触摸/平移手势,并根据该手势使滚动视图向下/向上移动。手势实际上不需要在滚动视图内开始。
以下是一些我觉得很有帮助的链接:
PullableView for ios - 这是一个很好且简单的示例,说明如何实现下拉/上/跨视图。我建议从github 下载代码并查看一下。 Implementing an iOS notification center pulldown Touch and pull down a view - 这是一个与你类似的 SO 问题。尤其是this answer,我很确定它会像你一样使用UIScrollView
。
Drag Down UIView in iOS 5 - 这个 SO 问题也有一些很好的答案。
希望这会有所帮助!
【讨论】:
谢谢, 1. 我怎么知道我的滚动视图是否在默认位置,没有触发事件? 2. 如果我把它设置为隐藏,窗帘的图像会不会消失? 3.滚动视图应该用手指“向下拖动”(当然)。所以它需要随时触发事件。 有点晚了,但我选择了第二个点答案 =)以上是关于iOS:通过scrollview适当传递正确的事件的主要内容,如果未能解决你的问题,请参考以下文章
如何将触摸事件从 ScrollView 子视图传递到它的父视图
在 iOS 8.1 之后,在所有设备上,当点击 alertview 取消按钮时,ScrollView 向上并且不滚动
ios的scrollview嵌套webview,解决事件冲突
iOS实现ScrollView中子控件view的触摸事件响应